asp.net – 如何使WebMethods序列化ExpandoObject
发布时间:2020-12-16 03:27:05 所属栏目:asp.Net 来源:网络整理
导读:我有一个看起来像这样的WebMethod用于填充jqGrid [System.Web.Script.Services.ScriptService]public class MyWebService: System.Web.Services.WebService{ [WebMethod] [Authorize(Roles = "Admin")] public object GetPeople(bool _search,double nd,int
我有一个看起来像这样的WebMethod用于填充jqGrid
[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; } } “results”是一个System.Dynamic.ExpandoObject,其属性为Items,TotalPages,TotalRecords 我从webservice上回来的json看起来像这样 { "d": [{ "Key": "TotalRecords","Value": 1 },{ "Key": "TotalPages",{ "Key": "Items","Value": [ [{ "Key": "Row","Value": 1 },{ "Key": "ID",{ "Key": "Name","Value": "Test Template" }] ] }] } } // Don't know why firebug put this extra bracket 理想情况下,我更喜欢它没有所有Key和Value业务,因为它不必要地膨胀了json并且与jqGrid不能很好地协作. 有没有办法改变ASP.NET处理ExpandoObject序列化的方式? 解决方法
听起来你已经想到了这一点,但这里有
something I threw together a while back这样做:
public class ExpandoObjectConverter : JavaScriptConverter { public override IEnumerable<Type> SupportedTypes { get { return new ReadOnlyCollection<Type>(new List<Type>(new Type[] { typeof(ExpandoObject) })); } } public override IDictionary<string,object> Serialize(object obj,JavaScriptSerializer serializer) { ExpandoObject expando = (ExpandoObject)obj; if (expando != null) { // Create the representation. Dictionary<string,object> result = new Dictionary<string,object>(); foreach (KeyValuePair<string,object> item in expando) { if (item.Value.GetType() == typeof(DateTime)) result.Add(item.Key,((DateTime)item.Value).ToShortDateString()); else result.Add(item.Key,item.Value.ToString()); } return result; } return new Dictionary<string,object>(); } public override object Deserialize(IDictionary<string,object> dictionary,Type type,JavaScriptSerializer serializer) { return null; } } 然后,您只需将其添加到< converters> web.config中的部分,如您链接到的MSDN文章中所示: <configuration> <system.web.extensions> <scripting> <webServices> <jsonSerialization> <converters> <add name="ExpandoObjectConverter" type="ExpandoObjectConverter"/> </converters> </jsonSerialization> </webServices> </scripting> </system.web.extensions> </configuration> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- ASP.NET中的缓存控制标头不输出max-age
- asp.net-mvc – Visual Studio 2013无法打开Razor视图 – ‘
- asp.net-mvc – F#Asp.Net CodeDom ProviderOptions问题
- asp.net-mvc-3 – CSS3 @ font-face休息Razor解析器 – 它可
- 详解ASP.NET Core 2.0 路由引擎之网址生成(译)
- asp.net – Application_Start在工作站上工作正常,部署时不
- 如何/在哪里asp.net mvc处理解码和动作方法参数
- asp.net-mvc – ASP.NET MVC会话超时,绝对还是滑动?
- asp.net-mvc – 在ASP.NET MVC3 Razor的渲染时间视图中获取
- 我们可以通过.net native编译asp.net 5应用程序吗?
推荐文章
站长推荐
- asp.net-mvc – 在ASP.NET MVC中实现自定义配置文
- 如何通过其他服务器发送对asp.net webform请求的
- asp.net – 使用MVC 4的.NET 4.5数据访问应用程序
- asp.net-mvc-4 – MVC4自定义OnActionExecuting
- asp.net – 在不安装的情况下部署Expression Enc
- asp.net – 多个项目Visual Studio 2015 npm
- asp.net-mvc – Html.RenderPartial和Html.Rende
- asp.net – 返回异常值
- 在asp.net中使用绑定表达式时,如何连接文本?
- entity-framework – 此版本的Entity Framework核
热点阅读