На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
  
> Десериализация JSON ответа
    Помогите разобраться с правильной десериализацией JSON ответа. К примеру имеем JSON ответ следующего вида:

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


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

    ExpandedWrap disabled
          [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 ответ будет следующего вида:

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


    т.е. после появления 3 в items, возникает проблема...и выше описанный код для десериализации не работает...
    был бы рад, если бы кто-нибудь смог мне объяснить...
      Объяснить что, почему код не работает? Так в items коллекция разнополых объектов получается, не укладывающаяся в List <ItemsList>
        хм, а можно ли обойти 3 во время десериализации? или нужно для нее новый класс описать?
          [DataMember(Name = "items")]
          public List <object> TestItemsList { get; set; }

          вот так по идее сработает, а как типизировать такую коллекцию по-другому я хз
            хм, да так работает, но тогда они получаются типа object...из него потом можно будет вытащить?
            0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
            0 пользователей:


            Рейтинг@Mail.ru
            [ Script execution time: 0,0256 ]   [ 16 queries used ]   [ Generated: 19.03.24, 04:07 GMT ]