【发布时间】:2019-07-24 14:22:50
【问题描述】:
我想创建一个 C# 类来使用 Newtonsoft.Json 反序列化这个 JSON:
[
{
"awb": "2205900120010",
"oras destinatar": "",
"continut": "",
"nume confirmare": "",
"data confirmare": "",
"ora confirmare": "",
"awb retur": "",
"0": {
"id": 0,
"status": "AWB-ul nu a fost predat catre FAN Courier",
"data": "",
"ora": "",
"oras": "",
"traseu": ""
}
},
{
"awb": "5345899260009",
"oras destinatar": "Tamaseu",
"continut": "COMANDA 16201",
"nume confirmare": "Szilagyi Ileana",
"data confirmare": "13.12.2018",
"ora confirmare": "17:16",
"awb retur": "",
"0": {
"id": 1,
"status": "Expeditie in livrare",
"data": "12.12.2018",
"ora": "14:46",
"oras": "Lugoj",
"traseu": "Expeditia a fost preluata de catre FAN Courier in data 12.12.2018 14:46."
},
"1": {
"id": 1,
"status": "Expeditie in livrare",
"data": "12.12.2018",
"ora": "19:35",
"oras": "Lugoj",
"traseu": "Expeditia a plecat din hub-ul FAN Courier Lugoj spre hub-ul de destinatie in data 12.12.2018 19:35."
},
"2": {
"id": 2,
"status": "Livrat",
"data": "13.12.2018",
"ora": "10:46",
"oras": "Oradea",
"traseu": "Expeditia a fost preluata spre livrare de catre curierul din orasul Oradea in data 13.12.2018 10:46."
},
"3": {
"id": 2,
"status": "Livrat",
"data": "13.12.2018",
"ora": "17:16",
"oras": "Oradea",
"traseu": "Ultimul status al expeditiei: livrat in data 13.12.2018 17:16."
}
}
]
已经尝试反序列化
var list = JsonConvert.DeserializeObject<List<AwbTrackingResponse>>(text);
但Events 仍然为空。
public class AwbTrackingResponse
{
[JsonProperty("awb")]
public string Awb { get; set; }
[JsonProperty("oras destinatar")]
public string DestinationCity { get; set; }
[JsonProperty("continut")]
public string Content { get; set; }
[JsonProperty("nume confirmare")]
public string ConfirmedName { get; set; }
[JsonProperty("data confirmare")]
public string ConfirmedDate { get; set; }
[JsonProperty("ora confirmare")]
public string ConfirmedHour { get; set; }
[JsonProperty("awb retur")]
public string AwbReturn { get; set; }
// ???
public Dictionary<int, AwbTrackingEvent> Events { get; set; }
}
public class AwbTrackingEvent
{
[JsonProperty("id")]
public int Id { get; set; }
[JsonProperty("status")]
public string Status { get; set; }
[JsonProperty("data")]
public string Date { get; set; }
[JsonProperty("ora")]
public string Time { get; set; }
[JsonProperty("oras")]
public string City { get; set; }
[JsonProperty("traseu")]
public string Route { get; set; }
}
我预计Events 字典也会被填充,但现在它仍然为空。我不确定 Newtonsoft.Json 库是否支持这种类型的反序列化。如果是,那么也许我可以提示我的 C# 类需要更改的内容,如果不是,那么也许我将获得另一种方法来将此 JSON 数据转换为可从 C# 代码中使用。
【问题讨论】:
-
我不确定是否有一种简单或干净的方法可以做到这一点。您可以将
AwbTrackingResponse替换为Dictionary<string, object>并手动处理属性。或者您更有可能需要一个自定义转换器。
标签: c# json json.net deserialization