Как десериализовать тело json с «0» в параметре

#c# #json #json-deserialization

Вопрос:

Я использую API, который выдает мне этот json в качестве ответа, это тело ответа json :

 {
   "meta":{
      "status":200,
      "message":"success"
   },
   "data":{
      "0":{
         "MsgID":"2661689817",
         "Status":"6",
         "SendTime":"2021-10-3114:30:04",
         "DeliverTime":"2021-10-31 14:30:07"
      }
   }
}
 

Моя проблема "0":{... в этом теле.

Как я могу десериализовать это в класс.

он не может десериализоваться в "string _0" prop.

Комментарии:

1. Всегда ли это «0»?

2. Это, скорее всего, словарь, десериализуйте его как таковой

3. @LIama: да, это всегда «0»

4. Какой сериализатор вы используете?

5. Вы пробовали JsonProperty атрибут. newtonsoft.com/json/help/html/jsonpropertyname.htm

Ответ №1:

Как говорит @TheGeneral, это похоже на словарь. Вы можете проанализировать — вот так:

 public void ParseObject()
{
    var response = @"{
                       'meta':{
                          'status':200,
                          'message':'success'
                       },
                       'data':{
                          '0':{
                             'MsgID':'2661689817',
                             'Status':'6',
                             'SendTime':'2021-10-3114:30:04',
                             'DeliverTime':'2021-10-31 14:30:07'
                          }
                       }
                    }";

    var responseObj = JsonConvert.DeserializeObject<MetaData>(response);
}

public class MetaData
{
    public Meta Meta { get; set; }
    public Dictionary<int, Data> Data { get; set; }
}

public class Meta
{
    public string Status { get; set; }
    public string Message { get; set; }
}

public class Data
{
    public string MsgId { get; set; }
    public string Status { get; set; }
    public string SendTime { get; set; }
}
 

Ответ №2:

попробуйте использовать JsonProperty

 public class Data
{
    [JsonProperty("0") ]
    public _0 _0 { get; set; }
}

public class _0
{
    public string MsgID { get; set; }
    public string Status { get; set; }
    public string SendTime { get; set; }
    public string DeliverTime { get; set; }
}