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核
热点阅读
