我正在从外部API中检索一些我无法控制的JSON,并且需要将其反序列化为一个对象,其中某些字段嵌套到主对象的属性中,因此直接反序列化将不起作用。 / p>
我发现的最接近的问题是:
我无法真正将此应用于我的问题,因为我对使用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; }
}
我不确定如何实施自定义合约解析器/ JSON转换器以获得所需的结果,因此任何指导都将受到赞赏。
答案 0 :(得分:1)
您不能使用JsonConvert
的默认JSON.Net
类,因为它无法转换复杂类中的平面json结构。如果我在你身边,我会将json解析为Dictionary<string, string>
,然后创建你的人员类
像这样:
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"]
}
};