如何使用JSON.net将JSON反序列化为嵌套类?
如何使用JSON.net将JSON反序列化为嵌套类?
这个问题已经有答案了:
我有一个JSON:
{"customer":[{"phone":"9868133331"},{"phone":"9971714514"}],"message":[{"type":"reminder"},{"type":"reminder"}]}
格式如下:
{ "customer": [ { "phone": "9868133331" }, { "phone": "9971714514" } ], "message": [ { "type": "reminder" }, { "type": "reminder" } ] }
我试图将JSON映射到一个嵌套类中:
public class AllData { public class Message { public String Type; } public class Customer { public String Phone; } public List Messages = new List(); public List Customers = new List(); }
使用这段代码:
AllData Data = new AllData(); Data = Newtonsoft.Json.JsonConvert.DeserializeObject(JSON);
但它给我返回Data.Customers
和Data.Messages
的空列表。代码没有将数据从JSON填充到我的List类型的对象中。我的意思是Data.Customers.Count
和Data.Messages.Count
都等于0
admin 更改状态以发布 2023年5月21日
JSON转换器将查找名为customer
和message
的属性。但是在你的AllData
类中都不存在。
请注意,如果你有数据如下:
var ad = new AllData(); ad.Messages.Add(new AllData.Message() { Type = "reminder" }); ad.Messages.Add(new AllData.Message() { Type = "reminder" }); ad.Customers.Add(new AllData.Customer() { Phone = "9868133331" }); ad.Customers.Add(new AllData.Customer() { Phone = "9971714514" });
那么序列化
Newtonsoft.Json.JsonConvert.SerializeObject(ad)
将会得到字符串
"{\"Messages\":[{\"Type\":\"reminder\"},{\"Type\":\"reminder\"}],\"Customers\":[{\"Phone\":\"9868133331\"},{\"Phone\":\"9971714514\"}]}"
你可以将其重新反序列化为一个AllData
对象:
AllData ad2 = Newtonsoft.Json.JsonConvert.DeserializeObject("{\"Messages\":[{\"Type\":\"reminder\"},{\"Type\":\"reminder\"}],\"Customers\":[{\"Phone\":\"9868133331\"},{\"Phone\":\"9971714514\"}]}");
现在,如果你想要的话,可以更改类定义以使用JsonProperty属性将JSON的message
对象序列化为类的Messages
属性:
using Newtonsoft.Json; public class AllData { public class Message { public String Type; } public class Customer { public String Phone; } [JsonProperty(PropertyName = "message")] public ListMessages = new List (); [JsonProperty(PropertyName = "customer")] public List Customers = new List (); }
然后,你可以将原始字符串反序列化如下:
AllData ad3 = Newtonsoft.Json.JsonConvert.DeserializeObject("{\"customer\":[{\"phone\":\"9868133331\"},{\"phone\":\"9971714514\"}],\"message\":[{\"type\":\"reminder\"},{\"type\":\"reminder\"}]}");
你可以使用VS菜单编辑 -> 粘贴特殊 -> 粘贴JSON作为类
,看看你的JSON应该看起来像什么。实际上,它看起来像
public class AllData { public Customer[] customer { get; set; } public Message[] message { get; set; } } public class Customer { public string phone { get; set; } } public class Message { public string type { get; set; } }
你应该更新属性名称或用JsonProperty
属性进行装饰。你也应该为集合属性指定getter和setter。