JSON反序列化不适合模型

时间:2019-04-29 19:46:42

标签: c# .net json serialization

我正在使用一个返回此JSON的服务,当模型中的映射仅将我带到第一个对象,而sms字段与其他对象为空时。

这是JSON:

{
  "cliente": "999999",
  "lote_id": "99999999999999",
  "fecha_recepcion": "2019-04-29 12:31:35",
  "resultado": 0,
  "resultado_t": null,
  "sms_procesados": 2,
  "referecia": "Referencia Prueba",
  "ip": "999.999.99.9",
  "sms": {
    "1": {
      "id": "9999999",
      "numero": "999999999",
      "sms": "tests",
      "fecha_envio": "2019-04-29 12:31:35",
      "ind_area_nom": "cell",
      "precio_sms": "9.00000",
      "resultado_t": "",
      "resultado": "0"
    },
    "2": {
      "id": "8888888",
      "numero": "9999998888",
      "sms": "test",
      "fecha_envio": "2019-04-29 12:31:35",
      "ind_area_nom": "Celular",
      "precio_sms": "9.00000",
      "resultado_t": "",
      "resultado": "0"
    }
  }
}

这是我的模型:

public class ResultadoSms
{
    public string cliente { get; set; }
    public Int64 lote_id { get; set; }
    public string fecha_recepcion { get; set; }
    public Int64 resultado { get; set; }
    public object resultado_t { get; set; }
    public Int64 sms_procesados { get; set; }
    public string referecia { get; set; }
    public string ip { get; set; }
    public Sms sms { get; set; }
}

public class Sms 
{       
    public CuerpoSms CuerpoSms { get; set; }
}

public class CuerpoSms
{
    public string id { get; set; }
    public string numero { get; set; }
    public string sms { get; set; }
    public string fecha_envio { get; set; }
    public string ind_area_nom { get; set; }
    public string precio_sms { get; set; }
    public string resultado_t { get; set; }
    public string resultado { get; set; }
}

我试图将sms字段转换为列表,但它仍然为空。我不明白问题是什么,或者不知道如何通过另一种更简单的方法反序列化对象。

2 个答案:

答案 0 :(得分:2)

您的模型不考虑JSON中1对象内的2sms等键。您需要使用Dictionary<string, CuerpoSms>来处理。

更改此行:

public Sms sms { get; set; }

对此:

public Dictionary<string, CuerpoSms> sms { get; set; }

提琴:https://dotnetfiddle.net/1XiwSF

答案 1 :(得分:1)

返回的JSON中的sms是具有 2个属性的对象,两者的结构与您的CuerpoSms相同。

要让它们在您的C#代码中自动序列化,您需要:

public class Sms 
{       
    [JsonProperty("1")]
    public CuerpoSms CuerpoSms1 { get; set; }

    [JsonProperty("2")]
    public CuerpoSms CuerpoSms2 { get; set; }
}