C# 使用自定义类c从API反序列化响应#
我正在从一个api接收以下格式的json响应。我正在尝试将其与自定义类进行对应C# 使用自定义类c从API反序列化响应#,c#,asp.net,json,c#-4.0,C#,Asp.net,Json,C# 4.0,我正在从一个api接收以下格式的json响应。我正在尝试将其与自定义类进行对应 { "TraceEvent": { "Attributes": { "Commodity": "APPLES", "Variety": "Green" }, "Codes": [{ "devicename": "", "code": "90149187
{
"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; }
}
公共类事件容器
{
[JsonProperty(“TraceeEvent”)]
公共跟踪事件跟踪事件{get;set;}
}
公共类跟踪事件
{
[JsonProperty(“属性”)]
公共TraceAttributes属性{get;set;}
[JsonProperty(“代码”)]
公共跟踪代码{get;set;}
}
公共类TraceAttributes
{
[JsonProperty(“商品”)]
公共字符串商品{get;set;}
[JsonProperty(“品种”)]
公共字符串变体{get;set;}
}
公共类跟踪码
{
公共跟踪码()
{
代码=新列表();
}
[JsonProperty(“代码”)]
公共列表代码{get;set;}
}
公共类跟踪码
{
[JsonProperty(“devicename”)]
公共字符串DeviceName{get;set;}
[JsonProperty(“代码”)]
公共字符串代码{get;set;}
[JsonProperty(“时间戳”)]
公共日期时间时间戳{get;set;}
}
在接收器端,对于代码
,我将得到null。请参考api接收器代码中的调试屏幕
有谁能告诉我如何重写我的自定义类以从JSON api反序列化代码列表吗
谢谢您的帮助。
TraceEvent
有一个属性
public TraceCodes Codes { get; set; }
而TraceCodes
是另一个具有代码列表的对象:
public List<TraceCode> Codes { get; set; }
所以“code”
部分是双重的。相反,您需要修改TraceEvent
以直接获得该列表:
public class TraceEvent
{
[JsonProperty("attributes")]
public TraceAttributes Attributes { get; set; }
[JsonProperty("Codes")]
public List<TraceCode> Codes { get; set; }
}
公共类跟踪事件
{
[JsonProperty(“属性”)]
公共TraceAttributes属性{get;set;}
[JsonProperty(“代码”)]
公共列表代码{get;set;}
}
顺便说一句,这实际上应该会导致一个
JsonSerializationException
,因此您应该检查它是否在某个地方被吞没。TraceEvent
有一个属性
public TraceCodes Codes { get; set; }
而TraceCodes
是另一个具有代码列表的对象:
public List<TraceCode> Codes { get; set; }
所以“code”
部分是双重的。相反,您需要修改TraceEvent
以直接获得该列表:
public class TraceEvent
{
[JsonProperty("attributes")]
public TraceAttributes Attributes { get; set; }
[JsonProperty("Codes")]
public List<TraceCode> Codes { get; set; }
}
公共类跟踪事件
{
[JsonProperty(“属性”)]
公共TraceAttributes属性{get;set;}
[JsonProperty(“代码”)]
公共列表代码{get;set;}
}
顺便说一句,这实际上应该会导致一个
JsonSerializationException
,因此您应该检查它是否在某个地方被吞没。更改类结构。代码应该在TraceeEvent类中,而不是在其自己的类中
public class TraceEvent
{
[JsonProperty("attributes")]
public TraceAttributes Attributes { get; set; }
[JsonProperty("Codes")]
public List<TraceCode> Codes { get; set; }
}
公共类跟踪事件
{
[JsonProperty(“属性”)]
公共TraceAttributes属性{get;set;}
[JsonProperty(“代码”)]
公共列表代码{get;set;}
}
下课
public class TraceCodes
{
public TraceCodes()
{
Codes = new List<TraceCode>();
}
[JsonProperty("Codes")]
public List<TraceCode> Codes { get; set; }
}
公共类跟踪代码
{
公共跟踪码()
{
代码=新列表();
}
[JsonProperty(“代码”)]
公共列表代码{get;set;}
}
更改类结构。代码应该在TraceeEvent类中,而不是在其自己的类中
public class TraceEvent
{
[JsonProperty("attributes")]
public TraceAttributes Attributes { get; set; }
[JsonProperty("Codes")]
public List<TraceCode> Codes { get; set; }
}
公共类跟踪事件
{
[JsonProperty(“属性”)]
公共TraceAttributes属性{get;set;}
[JsonProperty(“代码”)]
公共列表代码{get;set;}
}
下课
public class TraceCodes
{
public TraceCodes()
{
Codes = new List<TraceCode>();
}
[JsonProperty("Codes")]
public List<TraceCode> Codes { get; set; }
}
公共类跟踪代码
{
公共跟踪码()
{
代码=新列表();
}
[JsonProperty(“代码”)]
公共列表代码{get;set;}
}
如何反序列化?我觉得如果您使用asp.net mvc模型绑定,最好制作一个自定义modelbinder,如果您使用JSON.net进行反序列化,最好制作一个自定义jsonconverter。您提供了一个类,但它与事件容器
有什么关系?什么?那句话毫无意义。请将类定义添加到您的问题中。TraceCodes应该列出您如何反序列化?我觉得如果您使用asp.net mvc模型绑定,您最好制作一个自定义modelbinder,如果您使用JSON.net进行反序列化,您最好制作一个自定义jsonconverter。您提供了一个类,但它与EventContainer
有什么关系?什么?那句话毫无意义。请将类定义添加到您的问题中。TraceCodes应该列在他的屏幕截图中,他有EventContainer
,但他没有发布定义。结果发现他有一个拼写错误。哦,好吧~–谢谢你的提醒john!在他的截图中,他有EventContainer
,但他没有发布定义。结果他有一个打字错误。哦,好吧~–谢谢你的提醒john!