2013-05-02 68 views
0

我在这里试过一些例子,但是我把头发撕掉了。将一个孩子反序列化成一个对象

我做了一个查询,它返回JSON,里面的JSON有很多散列,例如。

{ "gjwiegjeigj": { ....}, "gjeeigjwoeigj": {...} ... }

欲通过每个这些循环中,并将内容物反序列化为一个对象。

我已经创建了对象myObject,它具有所有的字段,但是我被禁止了反序列化。

我可以使用JsonConvert.DeserializeObject直接从基础对象进行反序列化,但我不能这样做,我需要循环并将其实现给子代。

我想要一个自定义对象的数组,其中包含从Json获取的所有字段,因此我不关心每个对象的标题(垃圾哈希)。

任何想法?我知道我可以循环,这给了我很多JTokens,但那是我卡住的地方。

+1

你不喜欢什么[这里](http://stackoverflow.com/a/16339492/1906557)? – I4V 2013-05-02 14:40:15

+0

这个问题是关于.NET 4.5 JSON而不是JSON.NET,但是我遇到的关键问题是我不知道我是反序列化的字段的名称。我不能做[“人物”],因为这个字段被称为“gjwiegjoawigj”一些随机的名字。 – NibblyPig 2013-05-02 14:41:36

+0

你有什么尝试?向我们展示一些真实的代码,并告诉我们真正的问题是什么。 – ashes999 2013-05-02 15:06:15

回答

0

所以我想通了,基本上是从集合获得JToken S的是什么,我是说我通过.Children()我的JSON对象上迭代,我可以无论是将它转换为一个JProperty,做.Name得到的名称或.Value获得的价值,或者我能直接反序列化为一个对象,基本上是这样的:

MyObject record = (MyObject)JsonConvert.DeserializeObject(myRow.Children().First().ToString(), typeof(MyObject), settings);

然后我不知道需要知道我反序列化的财产的名称。

0

编辑:再次读你的问题,你提到知道和不知道所有的领域。这听起来像你真的不知道JSON字符串将包含什么字段。

对于这样的情况,我建议你使用dynamic - 这是它发光的地方。如果你知道所有的字段名称,你的类应该反序列化,没有任何问题。

你有什么试过?向我们展示一些真实的代码,以及真正的例外或问题。

反序列化到动态对象的名单很简单:

dynamic toReturn = JsonConvert.DeserializeObject<List<dynamic>>(rawJson);

您将获得动态对象的名单。您可以戳它的领域,你想:

Console.WriteLine(toReturn.First().gjwiegjeigj);

+0

如果不知道字段名称,该怎么办? – NibblyPig 2013-05-02 14:47:59

+0

@SLC看到这个答案:http://stackoverflow.com/a/2686386/210780尝试'toReturn.GetType()。GetProperties()' – ashes999 2013-05-02 14:55:09

+0

你不明白我的问题 – NibblyPig 2013-05-02 14:57:38

相关问题