用Json.NET将json字符串反序列化为json匿名对象
var o = new { a = 1, b = "Hello, World!", c = new[] { 1, 2, 3 }, d = new Dictionary<string, int> { { "x", 1 }, { "y", 2 } } }; var json = JsonConvert.SerializeObject(o);
第一种做法(匿名类):
var anonymous = new { a = 0, b = String.Empty, c = new int[0], d = new Dictionary<string, int>() }; 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<string, int>() }); 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"]);
注意 使用 .Last.Path; 可以获取节点名称.
平淡中储蓄成长
相关文章
发表评论
评论列表
- 这篇文章还没有收到评论,赶紧来抢沙发吧~