我有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<Message> Messages = new List<Message>();
public List<Customer> Customers = new List<Customer>();
}
代码:
AllData Data = new AllData();
Data = Newtonsoft.Json.JsonConvert.DeserializeObject<AllData>(JSON);
但它给了我空的Data.Customers
和Data.Messages
列表。代码不会将JSON中的数据填充到我的List类型的对象中。我的意思是Data.Customers.Count
和Data.Messages.Count
等于0
您可以使用VS菜单Edit -> Paste special -> Paste JSON as classes
来查看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
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<AllData>("{"Messages":[{"Type":"reminder"},{"Type":"reminder"}],"Customers":[{"Phone":"9868133331"},{"Phone":"9971714514"}]}");
现在,如果需要,可以更改类定义,使用JsonProperty属性将JSONmessage
对象序列化为类Messages
属性:
using Newtonsoft.Json;
public class AllData
{
public class Message
{
public String Type;
}
public class Customer
{
public String Phone;
}
[JsonProperty(PropertyName = "message")]
public List<Message> Messages = new List<Message>();
[JsonProperty(PropertyName = "customer")]
public List<Customer> Customers = new List<Customer>();
}
然后,您可以反序列化您的原始字符串,如下所示:
AllData ad3 = Newtonsoft.Json.JsonConvert.DeserializeObject<AllData>("{"customer":[{"phone":"9868133331"},{"phone":"9971714514"}],"message":[{"type":"reminder"},{"type":"reminder"}]}");
var res = Data = Newtonsoft.Json.JsonConvert.DeserializeObject<RootObject>(JSON);
public class Customer
{
public string phone { get; set; }
}
public class Message
{
public string type { get; set; }
}
public class RootObject
{
public List<Customer> customer { get; set; }
public List<Message> message { get; set; }
}
我使用JsonConvert将JSON反序列化为以下对象结构:
public class ResPLP
{
public string status { get; set; }
public ResPLPData data { get; set; }
}
public class ResPLPData
{
public string message { get; set; }
public string codigo { get; set; }
public int id { get; set; }
public string qr { get; set; }
}
json结构:
{
"status":"success",
"data":
{"message":"ok","codigo":"64581D","id":0136,"qr":"4a1db513cde17d4c35cb1d4.png"}
}
以及反序列化对象:手动清理结果内容中的字符串。
var resp = response.Content.ReadAsStringAsync().Result;
resp = resp.Trim(""".ToCharArray());
resp = resp.Replace("\", "");
ResPLP resplp = JsonConvert.DeserializeObject<ResPLP>(resp);
codres = resplp.data;