Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Общие вопросы по .NET и C# > Десериализация JSON ответа


Автор: arsenium 25.9.2011, 19:36
Помогите разобраться с правильной десериализацией 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, возникает проблема...и выше описанный код для десериализации не работает...
был бы рад, если бы кто-нибудь смог мне объяснить...

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

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

Она позволяет распарсить  Json в набор объектов и ходить по ним через индексаторы

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)