3

我正在尝试将文档写入 .NET 中的 CouchDB,但我不想用 标记我的所有Id属性[JsonProperty(MemberName = "_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™。

4

1 回答 1

3

首先创建一个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"}
于 2012-11-11T03:06:07.117 回答