gpt4 book ai didi

c# - 我可以在单个序列化程序的上下文中覆盖 Json.Net 成员名称映射吗?

转载 作者:行者123 更新时间:2023-11-30 16:21:17 25 4
gpt4 key购买 nike

我正在尝试将文档写入 .NET 中的 CouchDB,但我不想用 [JsonProperty(MemberName = "_id") 标记我所有的 Id 属性],因为我需要正常序列化它们(成员名称为 Id)以通过我自己的 HTTP API 将它们发送出去。

基本上,我想要这个:

var serializer = new JsonSerializer();
/* some magic happens */
serializer.Serialize(textWriter, new Thing { Id = "foo", Value = "bar" });

结果是:

{_id:"Foo",Value:"Bar"}

但是没有神奇的joojoo,应该还是这样:

{Id:"Foo",Value:"Bar"}

我假设这应该不会太难,但我不太了解 Json.Net 的内部结构,无法做到 Just Do It™。

最佳答案

首先创建一个ContractResolver:

public class IdContractResolver : DefaultContractResolver
{
protected override string ResolvePropertyName(string propertyName)
{
if (propertyName == "Id") return "_id";
return base.ResolvePropertyName(propertyName);
}
}

然后通过附加它来添加魔法:

var serializer = new JsonSerializer();
serializer.ContractResolver = new IdContractResolver();
serializer.Serialize(textWriter, new Thing { Id = "foo", Value = "bar" });

你得到:

{_id:"Foo",Value:"Bar"}

关于c# - 我可以在单个序列化程序的上下文中覆盖 Json.Net 成员名称映射吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13328040/

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