我在这里试了一些例子,但是我很头疼。
我做一个查询,它返回JSON, JSON里面有很多哈希值,例如
{ "gjwiegjeigj": { ....}, "gjeeigjwoeigj": {...} ... }
我想循环遍历其中的每一个,并将内容反序列化成一个对象。
我已经创建了对象myObject,它有所有的字段,但是我被反序列化卡住了。
我可以使用JsonConvert.DeserializeObject
直接从基本对象反序列化,但我不能这样做,我需要循环并对子对象进行反序列化。
我想要一个自定义对象的数组,其中包含从Json中获取的所有字段,因此我不关心每个对象的标题(垃圾哈希)。
任何想法?我知道我可以循环,这给了我很多jtoken,但这就是我卡住的地方。
编辑:再次阅读您的问题,您提到知道和不知道所有字段。听起来你真的不知道JSON字符串将包含哪些字段。
对于这样的情况,我建议你使用dynamic
——这是它的亮点。如果您确实知道所有字段名,那么您的类应该可以毫无问题地进行反序列化。你试过什么?给我们展示一些真实的代码,以及真实的异常或问题。
反序列化为动态对象列表很简单:
dynamic toReturn = JsonConvert.DeserializeObject<List<dynamic>>(rawJson);
你应该得到一个动态对象列表。您可以戳出您想要的字段:
Console.WriteLine(toReturn.First().gjwiegjeigj);
我弄明白了,基本上要从集合中获得JToken
s这就是我在JSON对象上迭代.Children()
时得到的结果,我可以将其强制转换为JProperty
并执行.Name
以获得名称或执行.Value
以获得值,或者我可以直接反序列化为对象,本质上是这样的:
MyObject record = (MyObject)JsonConvert.DeserializeObject(myRow.Children().First().ToString(), typeof(MyObject), settings);
那么我不需要知道我要反序列化的属性的名称