将json字符串转换为本机.net对象

时间:2011-10-26 13:49:49

标签: mongodb mongodb-.net-driver

我需要使用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);    

    .... 
}

3 个答案:

答案 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。