ExpandoObject对象的JSON序列化
如果:
dynamic expando = new ExpandoObject();
d.SomeProp=SomeValueOrClass;
然后,我们在控制器中:
return new JsonResult(expando);
那么,我们的前台将会得到:
[{"Key":"SomeProp", "Value": SomeValueOrClass}]
而实际上,我们知道,JSON 格式的内容,应该是这样的:
{SomeProp: SomeValueOrClass}
于是乎,我们需要一个自定义的序列化器,它应该如下:
public class ExpandoJSONConverter : JavaScriptConverter
{
public override IEnumerable<Type> SupportedTypes
{
get
{
return new ReadOnlyCollection<Type>(new Type[] { typeof(System.Dynamic.ExpandoObject) });
}
}public override object Deserialize(IDictionary<string, object> dictionary, Type type, JavaScriptSerializer serializer)
{
throw new NotImplementedException();
}public override IDictionary<string, object> Serialize(object obj, JavaScriptSerializer serializer)
{
var result = new Dictionary<string, object>();
var dictionary = obj as IDictionary<string, object>;
foreach (var item in dictionary)
{
result.Add(item.Key, item.Value);
}return result;
}
}
现在,我们的控制器应该像这样写:
public ContentResult GetSomeThing(string categores)
{
return ControllProctector.Do1(() =>
{…
var serializer = new JavaScriptSerializer();
serializer.RegisterConverters(new JavaScriptConverter[] { new ExpandoJSONConverter() });
var json = serializer.Serialize(expando);
return new ContentResult
{
Content = json,
ContentType = "application/json"
};
});
}
我们的浏览器就能得到正确的 JSON 字符串了。
备注:其它的方法还有
一:
dynamic expando = new ExpandoObject();
expando.Blah = 42;
expando.Foo = "test";
...var d = expando as IDictionary<string, object>;
d.Add("SomeProp", SomeValueOrClass);// After you've added the properties you would like.
d = d.ToDictionary(x => x.Key, x => x.Value);
return new JsonResult(d);
二: JSON.NET
dynamic expando = new ExpandoObject();
expando.name = "John Smith";
expando.age = 30;var json = JsonConvert.SerializeObject(expando);
三:Content-method:
public ActionResult Data()
{
dynamic expando = new ExpandoObject();
expando.name = "John Smith";
expando.age = 30;var json = JsonConvert.SerializeObject(expando);
return Content(json, "application/json");
}
最新文章
- 为什么要在游戏开发中使用ECS模式
- nodejs 模块恩仇录
- PHP数组
- Uncaught exception &#39;PDOException&#39; with message &#39;SQLSTATE[HY000] [2002] No such file or directory&#39;
- 微信开发-ACCESS TOKEN 过期失效解决方案
- ZooKeeper学习第五期--ZooKeeper管理分布式环境中的数据
- C++C++中构造函数与析构函数的调用顺序
- uva 1025,城市的间谍
- android + javascript 相互通信实例分析
- NET
- mac 修改密码后 频繁输入钥匙串问题修复方法
- 使用Jquery+EasyUI项目开发情况的框架是中评---员工管理源代码共享
- Java数据持久层框架 MyBatis之背景知识一
- Python系列:三、流程控制循环语句--技术流ken
- (转载)C#关于DateTime得到的当前时间的格式和用法
- neutron通信原理理解
- python3 得到a.txt中有的而b.txt中没有的汉字
- oracle授予调用存储过程权限
- Oracle导出DMP文件的两种方法
- python笔记06-----常用模块(time,os,sys,random)