我正在从我无法控制的外部 API 检索一些 JSON,需要将其反序列化为一个对象,其中一些字段嵌套到主对象的属性中,因此直接反序列化将不起作用。
我发现与我的问题最接近的问题是:
虽然我对使用 JSON.NET 还很陌生,但我仍然无法真正将其应用于我的问题,并且仍在尝试了解它是如何工作的。
用于演示从 API 返回的 json 的小示例:
{
FirstName: "John",
LastName: "Smith",
PassportNo: "xxxxx",
NiNo: "xxxxx",
}
我要反序列化的类:
internal sealed class Person
{
[JsonProperty(PropertyName = "FirstName")]
public string FirstName { get; set; }
[JsonProperty(PropertyName = "LastName")]
public string LastName { get; set; }
public PrivateData PrivateData { get; set; }
}
internal sealed class PrivateData
{
[JsonProperty(PropertyName = "PassportNo")]
public string PassportNo { get; set; }
[JsonProperty(PropertyName = "NiNo")]
public string NationalInsuranceNumber { get; set; }
}
我不确定如何实现自定义契约(Contract)解析器/JSON 转换器来获得所需的结果,因此不胜感激。
最佳答案
您不能使用默认的 JsonConvert
类JSON.Net
因为它无法转换复杂类中的平面 json 结构。如果我在你身边,我会将 json 解析为 Dictionary<string, string>
然后创建你的 person 类。
像这样:
Dictionary<string, string> values = JsonConvert.DeserializeObject<Dictionary<string, string>>(json);
var person = new Person {
FirstName = values["FirstName"] ,
LastName = values["LastName "],
PrivateData = new PrivateData {
PassportNo = values["PassportNo"],
NationalInsuranceNumber = values["NiNo"]
}
};
关于c# - 使用 JSON.NET 将平面 JSON 对象反序列化为复杂对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40126886/