gpt4 book ai didi

c# - 使用 JSON.NET 将平面 JSON 对象反序列化为复杂对象

转载 作者:行者123 更新时间:2023-12-04 17:56:30 25 4
gpt4 key购买 nike

我正在从我无法控制的外部 API 检索一些 JSON,需要将其反序列化为一个对象,其中一些字段嵌套到主对象的属性中,因此直接反序列化将不起作用。

我发现与我的问题最接近的问题是:

Json .Net serialize flat object into a complex object (change objects structure on serialization/deserialization)

虽然我对使用 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 转换器来获得所需的结果,因此不胜感激。

最佳答案

您不能使用默认的 JsonConvertJSON.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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com