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

发布于 2024-12-11 18:12:00 字数 607 浏览 0 评论 0原文

我需要使用 mongodb 将 json 转换为本机 .net 对象。该应用程序是用 javascript/mvc 编写的。

其中一个字段是日期时间对象,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);    

    .... 
}

I need to convert a json to a native .net object using mongodb. The application is written in javascript/mvc.

One of the field is a datetime object and the toJson function in the mongodb driver formats this as: "Modified":{"$date":1319630804846}

I want to parse this json from the client using the same format, but can't find a function that does this.

In Newtonsoft.Json I used this code, but this fails because of the date field:

var jobject = JObject.parse(jsonAsString)
var myObject = jobject.ToObject<myObject>();

But with the mongoDb driver, all I can do is converting the string to a BsonDocument

var buffer = new JsonBuffer(json);
using (BsonReader reader = new JsonReader(buffer))
{
    var doc = BsonDocument.ReadFrom(reader);    

    .... 
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

孤千羽 2024-12-18 18:12:00

DateTime 的 BSON 序列化格式是 Int64,包含自 Unix Epoch 以来的毫秒数。因此,如果您要创建一个 Utc 类型的 DateTime,设置为 1970 年 1 月 1 日,然后创建一个 TotalMilliseconds 设置为 Int64 的 TimeSpan,并将两者相加,您将获得 Utc 格式的日期。根据需要可以反向使用相同的算法。

The BSON serialization format for DateTime is an Int64 containing the number of milliseconds since Unix Epoch. So if you were to create a DateTime of kind Utc set to jan 1 1970 and then create a TimeSpan with TotalMilliseconds set to the Int64, and add the two together you'd have the date in Utc. The same algorithm could be used in reverse as needed.

琴流音 2024-12-18 18:12:00

如果您使用官方 .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")
}
>

If you're using the official .NET driver, you can work with objects without going through the JSON serialization.

Check the following example of how easy this is:

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"];
        }
    }
}

Here's the record as stored in MongoDB:

> db.children.findOne()
{
    "_id" : ObjectId("4ea821b2dd316c1e70e34d08"),
    "name" : "Micaiah",
    "birthday" : ISODate("2011-01-01T06:00:00Z")
}
>
童话 2024-12-18 18:12:00

使用 JSON.Net 将 Json 反序列化为 JObject,并将其发送到 MongoDB...如果 C# 中有更具体的类型,您需要将其序列化/反序列化为 JSON...然后保留来自您的具体对象或 JObject。

Use JSON.Net to de-serialize your Json into a JObject, and send that to MongoDB... if you have more concrete types in C#, you'll want to serialize/deserialize to/from that to JSON... then persist from your concrete object, or JObject.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文