2013-05-10 3 views
0

Как я могу десериализации следующий JSON в пользовательский объект с помощью C# и Json.NET:Как десериализовать массив JSON, содержащий объект, содержащий массив массивов с Json.NET и C#?

[ { 
    'data': [ 
     [ '100473','3481282801.0' ], 
     [ '100472','3481275600.0' ], 
     [ '100471','3481273800.0' ], 
     [ '100470','3481263900.0' ], 
     [ '100469','3481263000.0' ] 
    ], 
    'error': '', 
    'statement_time': 0.00440700000000000030, 
    'total_time': 0.00475200000000000010 
} ] 

Это массив, содержащий один объект. Чтобы сделать вещи более интересными, объект содержит массив массивов. (К сожалению, у меня нет контроля над форматом.) Я относительно новичок в JSON и думал, что попробую Json.NET. Я открыт для других систем JSON, если это упростит ситуацию.

ответ

4

Использование Json.NET

var result = JsonConvert.DeserializeObject<List<MyObject>>(str); 

public class MyObject 
{ 
    public List<List<string>> data { get; set; } 
    public string error { get; set; } 
    public double statement_time { get; set; } 
    public double total_time { get; set; } 
} 
+0

Это то, что я пробовал сначала, но он дает мне следующее сообщение об ошибке: Не удается десериализовать текущий массив JSON (например, [1,2,3]) в тип «Целевой», потому что для требуемого дескрипции типа требуется объект JSON (например, {«name»: «value»}). Чтобы исправить эту ошибку, либо измените JSON на объект JSON (например, {"name": "value"}), либо измените десериализованный тип на массив или тип, реализующий интерфейс коллекции (например, ICollection, IList), например List которые можно десериализовать из массива JSON. JsonArrayAttribute также может быть добавлен к типу, чтобы заставить его десериализоваться из массива JSON. – Ryan

+0

Я попытался программно удалить квадратные скобки с начала и конца (внешний массив), прежде чем пытаться десериализовать объект. Сейчас он работает, но это лучший способ сделать это? Я не знаю, почему система, которую я запрашиваю, возвращает объект в массиве. Я не вижу никакого преимущества в этом формате. – Ryan

+0

@ Ryan Учитывая ваш json в вопросе, над кодом работает отлично. (Я протестировал его еще раз, прежде чем писать этот комментарий) – I4V

0

Если вы используете C# 4.0 или выше, использовать динамический объект:

dynamic json = Newtonsoft.Json.JsonConvert.DeserializeObject(jsonstring); 

Тогда вы можете получить доступ к членам JSON с помощью точечной нотации, как это:

string s = json[0].data[0][0][1]; 

Это, например, вернет вам номер 100473.

+0

Я знаю, это должно просто проиллюстрировать, что таким образом вы получите этот номер из объекта JSON. – filipko

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