上篇文章"理解C# 4 dynamic(2) – ExpandoObject的使用" 了解了xpandoObject的基本使用。但ExpandoObject的问题就是它是一个万金油,什么都可以做,但是又都不专注。使用DynamicObject正好可以解决这个问题。这篇文章介绍DynamicJson是如何继承DynamicObject,包装一个用来处理Json的动态类型。
一,JS可以灵活处理Json字符串
看下面的代码,
var jsonString='{"foo":"json", "bar":100, "nest":{ "foobar":true }}';var jsonObj = JSON.parse(jsonString);//接着就能方便的使用jsonObj.foo jsonObj.nest.foobar
代码中的jsonObj是动态类型,在.net中,我们也可以反序列化Json,但都需要指定反序列化后的对象类型。
比如使用Json.Net
Newtonsoft.Json.JsonConvert.DeserializeObject(json, typeof(employee))
有没有办法和js一样,反序列化一个dynamic类型来方便的访问Json数据?
下面先来看看DynamicObject如何使用,然后使用DynamicObject来实现我们的想法。
二,DynamicObject分析
DynamicObject有个构造函数,但是protected, 也就是我们没有办法直接实例化来使用它。只能是通过继承来构造DynamicObject的对象。
同时DynamicObject中很很多标记为Virtual的方法,比如:
public