3

.NETのCouchDBにドキュメントを書き込もうとしていますが、自分のHTTP経由で送信するには、通常どおりに(メンバー名を使用して)シリアル化する必要があるため、すべてのIdプロパティをでマークしたくありません。 API。[JsonProperty(MemberName = "_id")]Id

基本的に、私はこれが欲しいです:

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の内部をJustDoIt™で十分に回避する方法がわかりません。

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 に答える