gpt4 book ai didi

c# - 使用已知和未知字段反序列化 json

转载 作者:IT老高 更新时间:2023-10-28 12:44:48 25 4
gpt4 key购买 nike

鉴于以下 json 结果:默认的 json 结果有一组已知的字段:

{
"id": "7908",
"name": "product name"
}

但可以使用额外的字段(在本例中为 _unknown_field_name_1_unknown_field_name_2)进行扩展,这些字段的名称在请求结果时是未知的。

{
"id": "7908",
"name": "product name",
"_unknown_field_name_1": "some value",
"_unknown_field_name_2": "some value"
}

我希望 json 结果在具有已知字段属性的类之间进行序列化和反序列化,并将未知字段(没有属性)映射到像字典一样的属性(或多个属性),所以它们可以被访问和修改。

public class Product
{
public string id { get; set; }
public string name { get; set; }
public Dictionary<string, string> fields { get; set; }
}

我认为我需要一种方法来插入 json 序列化程序并自己为丢失的成员进行映射(用于序列化和反序列化)。我一直在寻找各种可能性:

  • json.net 和自定义合约解析器(不知道怎么做)
  • datacontract 序列化器(只能覆盖 onserialized、onserializing)
  • 序列化为动态并进行自定义映射(这可能有效,但似乎工作量很大)
  • 让产品从 DynamicObject 继承(序列化程序使用反射,不调用 trygetmember 和 trysetmember 方法)

我使用的是restsharp,但是任何序列化器都可以插入。

哦,我无法更改 json 结果,thisthis也没有帮助我。

更新:这看起来更像:http://geekswithblogs.net/DavidHoerster/archive/2011/07/26/json.net-custom-convertersndasha-quick-tour.aspx

最佳答案

解决这个问题的一个更简单的方法是使用 JsonExtensionDataAttribute来自 JSON .NET

public class MyClass
{
// known field
public decimal TaxRate { get; set; }

// extra fields
[JsonExtensionData]
private IDictionary<string, JToken> _extraStuff;
}

在项目博客 here 上有一个示例

更新请注意,这需要 JSON .NET v5 版本 5 及更高版本

关于c# - 使用已知和未知字段反序列化 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15253875/

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