将 json 字符串转换为本机 .net 对象
我需要使用 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
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.
如果您使用官方 .NET 驱动程序,则无需执行 JSON 序列化即可使用对象。
检查以下示例,了解这有多么简单:
这是存储在 MongoDB 中的记录:
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:
Here's the record as stored in MongoDB:
使用 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.