【发布时间】:2013-05-15 03:27:45
【问题描述】:
我正在使用 MongoDB,并且有一个带有 mongodb ObjectId 的对象。 当我使用 .NET Json() 方法对其进行序列化时,一切都很好(但日期很糟糕!)
如果我使用 JSON.NET 序列化程序尝试此操作,它会在尝试序列化 ObjectID 时给我一个 InvalidCastException
任何想法发生了什么以及如何解决这个问题?
using MongoDB.Driver;
using MongoDB.Bson;
using Newtonsoft.Json;
//this is a route on a controller
public string NiceJsonPlease()
{
var q = new TestClass();
q.id = new ObjectId();
q.test = "just updating this";
return JsonConvert.SerializeObject(q);
}
//simple test class
class TestClass
{
public ObjectId id; //MongoDB ObjectID
public string test = "hi there";
}
Exception Details: System.InvalidCastException: Specified cast is not valid.
如果您将控制器方法更改为使用 .NET 附带的序列化程序,它可以正常工作(但是,这个给出了丑陋的日期,蓝光)
public JsonResult NiceJsonPlease()
{
var q = new TestClass();
q.id = new ObjectId();
q.test = "just updating this";
return Json(q, JsonRequestBehavior.AllowGet);
}
【问题讨论】:
-
啊,旧 Json 日期问题:hanselman.com/blog/…
-
@Liam 嗨,Liam,我实际上是在今天早些时候阅读了该博客,这也是我提出这个问题的原因。 JSON.NET 为我提供了更好的日期,但如果我在模型中包含 MongoDB ObjectID 并尝试使用 JSON.NET 对其进行序列化,则会出错。
-
你能展示你的代码吗?
-
在属性上使用属性 [BsonDefaultValue(0)] 并使用 ProjectionDefinition 从 MongoDB [BsonDefaultValue(0)] public long SomePropery;解决方案是删除属性。