gpt4 book ai didi

.net - 我可以在不注释类的情况下自定义Json.NET序列化吗?

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

我需要使用Json.NET将一些实体类序列化为JSON。为了自定义属性的名称,我使用[JsonProperty]属性,如下所示:

    [JsonProperty("lastName")]
public string LastName { get; set; }

问题是,我不想在我的实体中没有任何与JSON相关的属性...是否可以通过某种方式外部化注释,以免它们使我的实体困惑?

使用 XmlSerializer,可以通过 XmlAttributeOverrides 类轻松完成。 Json.NET是否有类似的东西?

最佳答案

是的,您可以创建自定义契约(Contract)解析器并自定义JsonProperty定义,而无需使用属性。示例如下:

class Person { public string First { get; set; } }

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

if (member.DeclaringType == typeof(Person) && member.Name == "First")
{
property.PropertyName = "FirstName";
}

return property;
}
}

class Program
{
static void Main(string[] args)
{
var result = JsonConvert.SerializeObject(
new Person { First = "John" },
new JsonSerializerSettings
{
ContractResolver = new PersonContractResolver()
});

Console.WriteLine(result);
}
}

该示例程序的输出如下:
// {"FirstName":"John"}

关于.net - 我可以在不注释类的情况下自定义Json.NET序列化吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11880677/

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