转载 

用Json.NET将json字符串反序列化为json匿名对象

分类:    515人阅读    IT小君  2015-02-12 15:19
 首先定义一个匿名对对象,并序列化成Json,用于测试。 如何将这个Josn字符串转换为JSON对象呢?如果先创建一个类的话,那就太累了。
复制代码
var o = new
{
   a = 1,
   b = "Hello, World!",
   c = new[] { 123 },
   d = new Dictionary<stringint> { { "x"1 }, { "y"2 } }
};
var json = JsonConvert.SerializeObject(o);
复制代码
 

第一种做法(匿名类):

var anonymous = new { a = 0, b = String.Empty, c = new int[0], d = new Dictionary<stringint>() };
var o2 = JsonConvert.DeserializeAnonymousType(json, anonymous);
Console.WriteLine(o2.b);
Console.WriteLine(o2.c[1]);


 

第二种做法(匿名类):

 

var o3 = JsonConvert.DeserializeAnonymousType(json, new { c = new int[0], d = new Dictionary<stringint>() });
Console.WriteLine(o3.d["y"]);

    DeserializeAnonymousType 只是借助这个匿名对象参数(anonymous) 反射类型而已,也就是说它和反序列化结果并非同一个对象。正如 o3 那样,我们也可以只提取局部信息。

 

第三种做法(索引器):

 

     实际上,我们也可以直接反序列化为 JObject,然后通过索引器直接访问。JObject、JProperty 等都继承自 JToken,它重载了基元类型转换操作符,我们可以直接得到实际结果。

var o2 = JsonConvert.DeserializeObject(json) as JObject;
Console.WriteLine((int)o2["a"]);
Console.WriteLine((string)o2["b"]);
Console.WriteLine(o2["c"].Values().Count());
Console.WriteLine((int)o2["d"]["y"]);

 

点击广告,支持我们为你提供更好的服务

HTML5 Canvas竖直流动线条背景动画特效

canvas炫酷鼠标移动文字粒子特效

html5图标下拉搜索框自动匹配代码

HTML5现代家居装潢公司网站模板

html5 svg夜空中星星流星动画场景特效

css+js实现的颜色渐变数字时钟动画特效

中小型创意设计服务公司网站模板

现代时尚家具公司网站模板

网页设计开发公司网站模板

小众时尚单品在线电子商务网站模板

HTML5数字产品服务公司网站模板

有机水果蔬菜HTML5网站模板

html5 canvas彩色碎片组合球形旋转动画特效

响应式咖啡饮品宣传网站模板

响应式时尚单品在线商城网站模板

jQuery右端悬浮带返回顶部特效

js+css3抽奖转盘旋转点餐代码

响应式太阳能能源公司网站模板

html5 canvas进度条圆环图表统计动画特效

css鼠标跟随文字模糊特效

点击广告,支持我们为你提供更好的服务
 工具推荐 更多»
点击广告,支持我们为你提供更好的服务