2016-06-16 16 views
-2

的JSON即将在这样的(伪代码):如何反序列化这个JSON数组

[{one-off intro object}, [{object},{object},{object}]] 

所以这是一个数组,其中数组中的第一件事情是一个对象,我没兴趣和其次是另一个阵列,其中充满了我实际想要反序列化的对象。

我该如何使用JSON.NET做到这一点?

+1

请仔细阅读[问],提供[MCVE](强调** **可验证的,当你表现出明显的不是有效的JSON),并分享你已经尝试了什么。 – CodeCaster

+0

你尝试过什么吗?任何具体问题? – Andrei

+0

那么首先你应该[看看它是否是有效的JSON](http://jsonlint.com/)(提示,它不是) – mason

回答

2

您可以使用Json.Net的LINQ-to-JSON API来完成这项工作。

了一个例子,让我们假设你的JSON看起来是这样的:

[ 
    { 
    "blah": "nothing interesting here" 
    }, 
    [ 
    { 
     "id": 1, 
     "name": "foo", 
     "desc": "description of foo" 
    }, 
    { 
     "id": 2, 
     "name": "bar", 
     "desc": "blurb about bar" 
    }, 
    { 
     "id": 3, 
     "name": "baz", 
     "desc": "buzz about baz" 
    } 
    ] 
] 

首先,定义一个类来保存从内部数组,你感兴趣的项目

public class Item 
{ 
    [JsonProperty("id")] 
    public int Id { get; set; } 

    [JsonProperty("name")] 
    public string Name { get; set; } 

    [JsonProperty("desc")] 
    public string Description { get; set; } 
} 

现在,您只需将JSON解析为JArray,然后从中获取子数组,然后使用ToObject()将其转换为项目列表。

JArray ja = JArray.Parse(json); 
List<Item> list = ja[1].ToObject<List<Item>>(); 

从那里,您可以像平常一样使用项目列表。

小提琴:https://dotnetfiddle.net/CaFzux

+0

非常感谢! –

+0

没问题;很高兴我能帮上忙。 –

0

您可以通过强类型铸造到第二组对象或动态,这里是动态做的一个例子:

dynamic jsonArray = JArray.Parse(json);   
dynamic targetJsonObjects = jsonArray[1]; 
+1

只有在设计时无法知道结构的情况下才应使用动态。 – mason

0

你试过就这样简单的模型?

public class RootObject 
{ 
    public object IntroObject { get; set; } 
    public List<Item> Items { get; set; } 
} 

public class Item 
{ 
    public string WhatEverPropertyYouNeed{ get; set; } 
} 
+0

这个结构实际上不会工作,因为JSON的外部是一个数组,而不是一个对象。 –