将 Json 转换为 Bson 文档时无法正确转换日期值
When converting Json to Bson Document fails to correctly convert date value
我正在尝试将 Json 对象转换为 MongoDb BsonDocument,但是在转换之后 Json 对象的日期值被转换为字符串而不是日期。以下示例将 BsonValueType 输出为字符串。
有什么方法可以正确转换为 Bson Date 值吗?
var newObject = new JObject {
{ "name", "John" },
{ "age", 25 },
{ "registeredDate" , "2017-05-09T09:14:06+00:00"},
};
BsonDocument bsonObj = BsonDocument.Parse(newObject.ToString());
Console.WriteLine(bsonObj["registeredDate"].BsonType);
//Outputs String
这并不奇怪,因为您的 JSON 对象的 registeredDate
属性 有一个字符串值开头(即使它包含一个格式类似于 ISO 的值日期)。
尝试以下方法之一:
如果要将 newObject
保留为 JObject
类型:
var newObject = new JObject
{
{ "name", "John" },
{ "age", 25 },
{ "registeredDate" , new JRaw(@"new ISODate(""2017-05-09T09:14:06+00:00"")") },
}; // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
这会提示 MongoDB 的 BsonDocument.Parse
字符串值包含 ISO 时间戳,应转换为 date/time 类型。
如果您愿意为 newObject
使用(强类型的)匿名 C# 类型:
var newObject = new
{
name = "John",
age = 25,
registeredDate = DateTime.Parse("2017-05-09T09:14:06+00:00"),
};
BsonDocument bsonObj = BsonDocument.Parse(newObject.ToJson());
这完全使 Json.NET 脱离了循环,让 MongoDB 完成所有工作。
我承认我不知道这些解决方案是否是应该如何完成的。我不太了解所涉及的库,无法展示其他(可能更好)的选项。
我正在尝试将 Json 对象转换为 MongoDb BsonDocument,但是在转换之后 Json 对象的日期值被转换为字符串而不是日期。以下示例将 BsonValueType 输出为字符串。
有什么方法可以正确转换为 Bson Date 值吗?
var newObject = new JObject {
{ "name", "John" },
{ "age", 25 },
{ "registeredDate" , "2017-05-09T09:14:06+00:00"},
};
BsonDocument bsonObj = BsonDocument.Parse(newObject.ToString());
Console.WriteLine(bsonObj["registeredDate"].BsonType);
//Outputs String
这并不奇怪,因为您的 JSON 对象的 registeredDate
属性 有一个字符串值开头(即使它包含一个格式类似于 ISO 的值日期)。
尝试以下方法之一:
如果要将
newObject
保留为JObject
类型:var newObject = new JObject { { "name", "John" }, { "age", 25 }, { "registeredDate" , new JRaw(@"new ISODate(""2017-05-09T09:14:06+00:00"")") }, }; // ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
这会提示 MongoDB 的
BsonDocument.Parse
字符串值包含 ISO 时间戳,应转换为 date/time 类型。如果您愿意为
newObject
使用(强类型的)匿名 C# 类型:var newObject = new { name = "John", age = 25, registeredDate = DateTime.Parse("2017-05-09T09:14:06+00:00"), }; BsonDocument bsonObj = BsonDocument.Parse(newObject.ToJson());
这完全使 Json.NET 脱离了循环,让 MongoDB 完成所有工作。
我承认我不知道这些解决方案是否是应该如何完成的。我不太了解所涉及的库,无法展示其他(可能更好)的选项。