我需要使用mongodb将json转换为本机.net对象。该应用程序是用javascript / mvc。
编写的其中一个字段是datetime对象,mongodb驱动程序中的toJson函数将其格式化为:“Modified”:{“$ date”:1319630804846}
我想使用相同的格式从客户端解析这个json,但找不到执行此操作的函数。
在Newtonsoft.Json中我使用了这段代码,但由于日期字段而失败:
var jobject = JObject.parse(jsonAsString)
var myObject = jobject.ToObject<myObject>();
但是使用mongoDb驱动程序,我所能做的就是将字符串转换为BsonDocument
var buffer = new JsonBuffer(json);
using (BsonReader reader = new JsonReader(buffer))
{
var doc = BsonDocument.ReadFrom(reader);
....
}
答案 0 :(得分:1)
DateTime的BSON序列化格式是一个Int64,包含自Unix Epoch以来的毫秒数。因此,如果要创建一个类型为Utc的DateTime设置为1970年1月1日,然后创建一个TimeMan,并将TotalMilliseconds设置为Int64,并将两者一起添加,则在Utc中有日期。可以根据需要反向使用相同的算法。
答案 1 :(得分:1)
如果您使用的是官方.NET驱动程序,则无需通过JSON序列化即可使用对象。
请查看以下示例,了解这是多么容易:
class Child
{
public ObjectId id;
public string name;
public DateTime birthday;
}
class Program
{
static void Main(string[] args)
{
Child m = new Child();
m.name = "Micaiah";
m.birthday = DateTime.Parse("January 1, 2011");
Children.Insert<Child>(m);
foreach (Child kiddo in Children.FindAllAs<Child>())
{
Console.WriteLine("Kiddo: {0} {1}", kiddo.name, kiddo.birthday);
}
Console.ReadLine();
}
static MongoCollection Children
{
get
{
MongoServer s = MongoServer.Create("mongodb://localhost");
return s["demos"]["children"];
}
}
}
这是存储在MongoDB中的记录:
> db.children.findOne()
{
"_id" : ObjectId("4ea821b2dd316c1e70e34d08"),
"name" : "Micaiah",
"birthday" : ISODate("2011-01-01T06:00:00Z")
}
>
答案 2 :(得分:0)
使用JSON.Net将Json反序列化为JObject,并将其发送到MongoDB ...如果C#中有更多具体类型,则需要序列化/反序列化为JSON。然后坚持你的具体对象,或JObject。