是否可以在单个序列化程序的上下文中重写 Json.Net 成员名称映射



我正在尝试将文档写入 .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 的内部结构,无法做到这一点™。

首先创建一个合约解析器:

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"}

相关内容

  • 没有找到相关文章

最新更新