Десериализовать Json в C # - PullRequest
1 голос
/ 12 ноября 2009
{"person": "david",
 "images":
  {"usable_sizes":
    [[[150,
       41],
      "image1.png"],
     [[220,
       61],
      "image2.png"],
     [[220,
       61],
      "image3.png"]],
   "uploader": null}}

Я использую JavaScriptSerializer в C # для анализа некоторых JSON. Выше приведена строка, которую я получаю из веб-запроса. Вызов Deserialize для строки помещает Person в нужное место в объекте, но я не знаю, какой тип использовать для массива, вложенного в «images». Я в полной растерянности.

здесь соответствующий код:

TopLevelObject topObj = new JavaScriptSerialize().Deserialize<TopLevelObj>(jsonStream);

public TopLevelObject
{
    public string person;
    public imgStruct images;
}

public class imgStructure
{
    public List<string[,][]> available_sizes;
}

но это не так. Я пробовал множество других форм для этого класса, но не могу заставить десериализовать данные без правильных ключей. У меня нет возможности изменить входящий JSON, поскольку я потребляю его у третьей стороны.

Ответы [ 2 ]

2 голосов
/ 12 ноября 2009

Я считаю, что ваши занятия должны выглядеть так:

public class RootObj
{
    public string person;
    public ImageDataObj images;
}

public class ImageDataObj
{
    public object uploader;
    public List<List<object>> usable_sizes
}

Как видите, внутренний список - это список объектов. Это связано с тем, что список содержит элементы разных типов: один представляет собой список (числовые данные [150, 41]), а другой - строку (имя изображения). Я не думаю, что вы можете строго набрать внутренний список по этой причине. Возможно, стоит проверить во время выполнения (используя средства отладки VS) структуру объектов во внутреннем списке, и это может дать вам представление о том, как его отобразить.

Как выглядит тип свойства usable_images, если рассмотреть его подробно:

public List<List<Dictionary<List<int>,string>>> usable_sizes

но это только предположение.

0 голосов
/ 12 ноября 2009

Я бы посоветовал перейти на JSON.org и использовать одно из их готовых решений.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...