我正在通过以下方式即时创建JSON对象(不需要 Json.net):
dynamic expando = new ExpandoObject();
expando.Age = 42;
expando.Name = "Royi";
expando.Childrens = new ExpandoObject();
expando.Childrens.First = "John";
这看起来像是:
因此,我可以像这样查询它:
Console.WriteLine (expando.Name); //Royi
好的,那么让我们对其进行序列化:
var jsonString = new JavaScriptSerializer().Serialize(expando);
Console.WriteLine (jsonString);
结果:
[{"Key":"Age","Value":42},{"Key":"Name","Value":"Royi"},{"Key":"Childrens","Value":[{"Key":"First","Value":"John"}]}]
请注意,expando(即字符串、对象的Idictionary)正在保存数据
问题
现在我想将字符串反序列化回来:
我尝试过:
var jsonDeserizlied = new JavaScriptSerializer().Deserialize<ExpandoObject>(jsonString);
但是:
'System.Dynamic.ExpandoObject'类型不支持数组的反序列化。
那么,我应该怎么办才能得到
[{"Key":"Age","Value":42},{"Key":"Name","Value":"Royi"},{"Key":"Childrens","Value":[{"Key":"First","Value":"John"}]}]
回到可扩展表示方式?
注
我们不使用JSON.net。
更新
我已成功将object[]
更改为IList<IDictionary<string,object>>
:
var jsonDeserizlied = new JavaScriptSerializer().Deserialize<IList<IDictionary<string,object>>>(jsonString);
现在的样子是: 但是我需要将其转换为:
Dictionary<String, Object>
而不是通过Expando进行反序列化吗?就像这样:var jsonDeserizlied = new JavaScriptSerializer().Deserialize<Dictionary<String, Object>>(jsonString);
- Peter SmithExpandoObject
转换为Dictionary<string, object>
,然后再进行反序列化为JSON呢? - James