我正在使用一个返回 JSON 数据的 Web 服务,在许多情况下,该服务返回一个对象中的多个属性,我想在 C# 端将这些属性分组到一个类中。考虑一个像这样的类结构:
class Person
{
public Address Address { get; set; }
public string Name { get; set; }
}
class Address
{
public string StreetAddress { get; set; }
public string City { get; set; }
public string ZipCode { get; set; }
}
JSON 数据如:
{ "Name" : "Pilchie",
"StreetAddress" : "1234 Random St",
"City" : "Nowheretown",
"Zip" : "12345"
}
是否可以为我的 Person
和 Address
类添加属性,以便它们序列化/反序列化为这种格式?
最佳答案
我认为您无法让 JSON.NET 一次性完成所有工作——您必须手动创建 Person 对象。但是,您可以在不创建单独的 DTO 类的情况下执行此操作。例如:
var jsonText = "{ \"Name\" : \"Pilchie\"," +
"\"StreetAddress\" : \"1234 Random St\"," +
"\"City\" : \"Nowheretown\"," +
"\"Zip\" : \"12345\"" +
"}";
JObject jsonObject = (JObject) JsonConvert.DeserializeObject(jsonText);
var person =
new Person
{
Address = new Address
{
City = (String) jsonObject["City"],
StreetAddress = (String) jsonObject["StreetAddress"],
ZipCode = (string) jsonObject["Zip"]
},
Name = (string) jsonObject["Name"]
};
和序列化:
JsonConvert.SerializeObject(
new
{
person.Name,
person.Address.StreetAddress,
person.Address.City,
Zip = person.Address.ZipCode
});
关于c# - 使用 JSon.net 将平面 JSON 数据反序列化为结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11583107/