我无法使用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"
}
}
答案 0 :(得分:3)
生成的有效内容对象为null,因为json字符串结构与您的Payload
类不匹配。您需要其他包装类才能成功反序列化:
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
属性以便成功反序列化。
答案 1 :(得分:-1)
尝试下面的一个
DeserializeObject的类型参数必须是List<Payload>
而不是字符串。它将是JsonConvert.DeserializeObject<List<Payload>>(json)
。