我正在尝试将文档写入 .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"}