Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Десериализация JSON ответа 
:(
    Опции темы
arsenium
Дата 25.9.2011, 19:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 31
Регистрация: 14.5.2009

Репутация: нет
Всего: нет



Помогите разобраться с правильной десериализацией JSON ответа. К примеру имеем JSON ответ следующего вида:

Код

{"variant":"otvet1",
 "source":"otvet2",
 "items":[
          {"list":"512"},
          {"vist":"315"},
          {"zist":"561"}]}


Для его десериализации код:

Код

    [DataContract]
    public partial class ItemsList
    {
        [DataMember(Name = "list")]
        public string lisType { get; set; }

        [DataMember(Name = "vist")]
        public string vistType { get; set; }

        [DataMember(Name = "zist")]
        public string zistType { get; set; }
    }

    [DataContract]
    public partial class SourceList
    {
        [DataMember(Name = "variant")]
        public string variantType { get; set; }

        [DataMember(Name = "source")]
        public string vistType { get; set; }

        [DataMember(Name = "items")]
        public List <ItemsList> TestItemsList { get; set; }
    }

    public class JsonStringSerializer
    {
        public static T Deserialize<T>(string strData) where T : class
        {
            MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(strData));
            DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
            T tRet = (T)ser.ReadObject(ms);
            ms.Close();
            return (tRet);
        }
    }

    private static SourceList SourceTempList;
    SourceTempList = JsonStringSerializer.Deserialize<SourceList>(e.Result); //в e.Result находится JSON ответ



И все работает как нужно, а вот если JSON ответ будет следующего вида:

Код

{"variant":"otvet1",
 "source":"otvet2",
 "items":[3,
          {"list":"512"},
          {"vist":"315"},
          {"zist":"561"}]}


т.е. после появления 3 в items, возникает проблема...и выше описанный код для десериализации не работает...
был бы рад, если бы кто-нибудь смог мне объяснить...

PM MAIL   Вверх
Sven47
Дата 27.9.2011, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 10
Регистрация: 22.4.2006
Где: Украина/Киев

Репутация: нет
Всего: нет



Последний пример Json-a не не валидный, т.к. коллекцией не может содержать элементы разного типа. По крайней мере так считает MS:)

Попробуйте воспользоваться опенсорсной библиотекой http://json.codeplex.com/ 

Она позволяет распарсить  Json в набор объектов и ходить по ним через индексаторы
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0614 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.