Tengo un WebMethod que tiene este aspecto que se utiliza para rellenar un jqGrid¿Cómo hago webMethods serializar ExpandoObject
[System.Web.Script.Services.ScriptService]
public class MyWebService: System.Web.Services.WebService
{
[WebMethod]
[Authorize(Roles = "Admin")]
public object GetPeople(bool _search, double nd, int rows, int page, string sidx, string sord)
{
var tbl = new DynamicModel("ConnStr", tableName: "Person", primaryKeyField: "ID");
var results = tbl.Paged(orderBy: sidx + " " + sord, currentPage: page, pageSize: rows);
return results;
}
}
"resultados" es un System.Dynamic.ExpandoObject con las propiedades de elementos, TotalPages, TotalRecords
el JSON que regrese a la del servicio web se parece a esto
{
"d": [{
"Key": "TotalRecords",
"Value": 1
}, {
"Key": "TotalPages",
"Value": 1
}, {
"Key": "Items",
"Value": [
[{
"Key": "Row",
"Value": 1
}, {
"Key": "ID",
"Value": 1
}, {
"Key": "Name",
"Value": "Test Template"
}]
]
}]
}
} // Don't know why firebug put this extra bracket
lo ideal sería que preferiría que se trata de volver sin todo el negocio clave y valor, ya que se hincha fuera del json innecesariamente y no juega muy bien con jqGrid.
¿Hay alguna manera de cambiar la forma en que ASP.NET maneja la serialización de ExpandoObject?
Un amigo me recomendó este enfoque http://stackoverflow.com/questions/5156664/how-to-flatten-an-expandoobject-returned-via-jsonresult-in-asp -net-mvc pero no sé cómo registrar el JavaScriptConverter con el JavaScriptSerializer que el bmethod usa. –
Maldita sea, la respuesta que busco está aquí http://msdn.microsoft.com/en-us/library/bb763183.aspx a mitad de camino –
Es bueno saber que aprendiste algo nuevo :) – Jull