我在使用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。