2016-06-16 4 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's 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>>(); 

Оттуда вы можете использовать список предметов, как обычно.

Fiddle: https://dotnetfiddle.net/CaFzux

+0

Большое вам спасибо! –

+0

Нет проблем; Рад, что смог помочь. –

0

Вы можете добраться до второго множества объектов либо с помощью строго типизированного литья или динамически, вот пример делать это динамически:

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

Dynamic следует использовать только в ситуациях, когда структура не может быть известна во время разработки. – 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 представляет собой массив, а не объект. –

Смежные вопросы