JSON 应用愈发广泛,相对 XML 而言,JSON 格式的数据量更小,更利于传输和存储。在 Ajax、Data Service、Silverlight 等框架中都有大量应用。但 .NET Framework 对 JSON 的支持还很弱,由于无法使用动态类型,因此 JavaScriptSerializer().DeserializeObject() 只是简单地将 "未知类型" 的目标反序列化为一个泛型词典(Dictionary),看上去像个半成品。
CodePlex Json.NET 是另外一种选择,作者特意提供了一个 JsonConvert.DeserializeAnonymousType(),使得我们可以用一个匿名对象实例来指定反序列化类型。
@H_301_3@
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],int>() });
Console.WriteLine(o3.d["y"]);