gpt4 book ai didi

c# - 有没有办法让 JSON.net 尊重 System.Text.Json JsonPropertyName 属性

转载 作者:行者123 更新时间:2023-12-03 13:39:51 26 4
gpt4 key购买 nike

我有一个 C# 类型,它表示一个反序列化的 C# 负载。但它被 System.Text.Json 在一处反序列化。在另一个地方,它是 Json.NET。
所以现在,我必须同时使用 [JsonProperty] 来属性属性。 (对于 JSON.NET)和 [JsonPropertyName] (对于 System.Text.Json)。
有没有办法告诉 JSON.NET 识别 JsonPropertyName 属性,这样我就不必对每个属性进行两次注释?

最佳答案

您可以创建 custom contract resolver这将搜索 JsonPropertyName属性和使用值(value)。示例一看起来像这样:

public class ContractResolver : DefaultContractResolver
{
protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
{
JsonProperty property = base.CreateProperty(member, memberSerialization);

if (member.GetCustomAttribute<JsonPropertyNameAttribute>() is {} stj)
{
property.PropertyName = stj.Name;
return property;
}

return property;
}
}
和用法:
class MyClass
{
[JsonProperty("P1")]
public int MyProperty { get; set; }
[JsonPropertyName("P2")]
public int MyProperty2 { get; set; }
}

var settings = new JsonSerializerSettings
{
ContractResolver = new ContractResolver()
};

Console.WriteLine(JsonConvert.SerializeObject(new MyClass(), settings)); // prints {"P1":0,"P2":0}
Console.WriteLine(JsonConvert.DeserializeObject<MyClass>("{'P1':1,'P2':2}", settings).MyProperty2); // prints 2

关于c# - 有没有办法让 JSON.net 尊重 System.Text.Json JsonPropertyName 属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66067476/

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