我从api收到以下格式的json响应。我试图用自定义类反序列化它。
{
"TraceEvent": {
"Attributes": {
"Commodity": "APPLES",
"Variety": "Green"
},
"Codes": [{
"devicename": "",
"code": "901491877572115",
"timestamp": "2018-02-15T19:33:29.4418926+05:30"
}, {
"devicename": "",
"code": "6657287134488755",
"timestamp": "2018-02-15T19:33:29.4418926+05:30"
}
]
}
}
下面是我用于反序列化的自定义类
public class EventContainer
{
[JsonProperty("TraceEvent")]
public TraceEvent TraceEvent { get; set; }
}
public class TraceEvent
{
[JsonProperty("attributes")]
public TraceAttributes Attributes { get; set; }
[JsonProperty("codes")]
public TraceCodes Codes { get; set; }
}
public class TraceAttributes
{
[JsonProperty("commodity")]
public string Commodity { get; set; }
[JsonProperty("variety")]
public string Variety { get; set; }
}
public class TraceCodes
{
public TraceCodes()
{
Codes = new List<TraceCode>();
}
[JsonProperty("Codes")]
public List<TraceCode> Codes { get; set; }
}
public class TraceCode
{
[JsonProperty("devicename")]
public string DeviceName { get; set; }
[JsonProperty("code")]
public string Code { get; set; }
[JsonProperty("timestamp")]
public DateTime Timestamp { get; set; }
}
在接收方,我为Codes
获取空值。 Plesae在api接收器代码中引用我的调试屏幕,
任何人都可以告诉我如何重写我的自定义类以从JSON api反序列化代码列表
感谢您的帮助。
答案 0 :(得分:4)
更改课程结构。代码应该在TraceEvent类中而不是在它自己的类
中public class TraceEvent
{
[JsonProperty("attributes")]
public TraceAttributes Attributes { get; set; }
[JsonProperty("Codes")]
public List<TraceCode> Codes { get; set; }
}
删除下面的课程
public class TraceCodes
{
public TraceCodes()
{
Codes = new List<TraceCode>();
}
[JsonProperty("Codes")]
public List<TraceCode> Codes { get; set; }
}
答案 1 :(得分:2)
TraceEvent
有一个属性
public TraceCodes Codes { get; set; }
TraceCodes
是另一个带有代码列表的对象:
public List<TraceCode> Codes { get; set; }
这意味着必须有这样的结构:
{
"TraceEvent": {
"Codes": {
"Codes": [
{ … },
{ … },
}
}
}
}
所以"Codes"
部分是双倍的。相反,您需要修改TraceEvent
以直接拥有该列表:
public class TraceEvent
{
[JsonProperty("attributes")]
public TraceAttributes Attributes { get; set; }
[JsonProperty("Codes")]
public List<TraceCode> Codes { get; set; }
}
顺便说一下。应该实际上导致JsonSerializationException
,所以你应该检查是否会被某个地方吞噬。