我正在使用带有RestSharp客户端的MVC4 WebApi,我正在努力让ObjectIds正确地序列化(或反序列化)。
我有一个像这样的基础课:
public class User
{
[BsonId]
public ObjectId Id { get; set; }
public string FirstName { get; set; }
public string LastName { get; set; }
}
在客户端上反序列化此对象的最佳/正确方法是什么?我尝试Id属性的所有东西都是ObjectId.Empty的值。
我尝试过创建一个不同的ObjectIdDeserializers。下面是一个反序列化器以及发送回客户端的客户端和示例json的示例。
public class ObjectIdDeserializer : IDeserializer
{
public string RootElement { get; set; }
public string Namespace { get; set; }
public string DateFormat { get; set; }
public T Deserialize<T>(RestSharp.IRestResponse response)
{
return BsonSerializer.Deserialize<T>(response.Content);
}
}
在RestSharp中,我添加了以下行来调用上面的反序列化器:
_client.AddHandler("application/json", new ObjectIdDeserializer());
一些样本json看起来像这样:
"User":
{
"Id":
{
"_timestamp":1339158960,
"_machine":7962014,
"_pid":4040,
"_increment":9499872
},
"FirstName":"Test",
"LastName":"User"
}
答案 0 :(得分:3)
在搜索SO之后,我能够找到一个简单的解决方案来解决我想要做的事情。
使用此答案中的方法,属性将存储为ObjectId,而在代码中,它只是一个字符串。正是我希望实现的目标。