【发布时间】:2015-04-22 09:41:05
【问题描述】:
我正在通过以下方式动态创建一个 json 对象(without 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(它是字符串、对象的字典)是如何保存数据的
问题
现在我希望将字符串反序列化回:
我试过了:
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"}]}]
回到扩展表示?
nb
我们不使用 JSON.net。
更新
我已设法将object[] 更改为IList<IDictionary<string,object>>:
var jsonDeserizlied = new JavaScriptSerializer().Deserialize<IList<IDictionary<string,object>>>(jsonString);
现在是:
但是,我需要将其转换为:
【问题讨论】:
-
this answer 会为您工作吗?一旦它成为一个对象,您就可以将其转换为 expando,对吗?
-
没有。看看这里为什么i.imgur.com/1PnZ4T2.png(问题是因为数组结构)
-
而不是通过 Expando 反序列化您是否尝试过
Dictionary<String, Object>?如var jsonDeserizlied = new JavaScriptSerializer().Deserialize<Dictionary<String, Object>>(jsonString); -
@PeterSmith 我相信这是一回事。 Expando 实现 IDictionary
, -
@RoyiNamir 啊...我明白你的意思,它不是在 single 字典中序列化每个属性,而是将它们分解为 3 个独立的。这似乎是序列化程序如何生成 JSON 的更多问题,因为从技术上讲,JSON 的表示并不表明它是单个对象。您是否尝试过先将
ExpandoObject转换为Dictionary<string, object>然后然后反序列化为 JSON?
标签: c# json javascriptserializer