使用JSON.net反序列化对象



我在使用JSON.net将JSON字符串取消序列化为对象时遇到问题。

我称之为串行化:

Payload payload = JsonConvert.DeserializeObject<Payload>(string);

但是,生成的Payload对象是null。有什么想法吗?

我的班级:

public class Payload
{
    public Payload()
    { }
    public string Action { get; set; }
    public Payload.Bill[] Bills { get; set; }
    public string ResourceType { get; set; }
    public string Signature { get; set; }
    public class Bill
    {
        public Bill()
        { }
        public string Amount { get; set; }
        public string Id { get; set; }
        public string MerchantId { get; set; }
        public DateTimeOffset? PaidAt { get; set; }
        public string SourceId { get; set; }
        public string SourceType { get; set; }
        public string Status { get; set; }
        public string Uri { get; set; }
        public string UserId { get; set; }
    }
}

我的JSON字符串:

{
  "payload": {
    "bills": [
      {
        "id": "xxxx",
        "status": "withdrawn",
        "uri": "xxxx",
        "amount": "5.19",
        "amount_minus_fees": "5.14",
        "source_type": "subscription",
        "source_id": "xxx",
        "payout_id": "xxx"
      }
    ],
    "resource_type": "bill",
    "action": "withdrawn",
    "signature": "xxx"
  }
}

由于json字符串结构与Payload类不匹配,因此生成的有效负载对象为null。您需要额外的包装器类来成功地反序列化它:

public class PayloadWrapper
{
    public PayloadWrapper()
    {
        Payload = new Payload();
    }
    public Payload Payload { get; set; }
}

以及反序列化逻辑:

PayloadWrapper wrap = JsonConvert.DeserializeObject<PayloadWrapper>(jsonStr);

为了避免创建另一个包装类,可以使用LINQ To JSON:

JObject obj = JObject.Parse(jsonStr);
Payload payload = obj["payload"].ToObject<Payload>();

其中jsonStr变量是您发布的json字符串。我还注意到json字符串中的一些属性与Payload类的属性名不匹配,比如json字符串的resource_type和类的ResourceType。为它们添加JsonProperty属性以成功反序列化。

尝试下面的一个DeserializeObject的类型参数必须是List<Payload>,而不是字符串。它将是CCD_ 10。

相关内容

  • 没有找到相关文章

最新更新