C#(和MongoDB)DateTime转换(从BSON到C#对象)

时间:2014-07-04 00:54:11

标签: c# mongodb datetime

我一直在使用MongoDB C#驱动程序,将一些文档从当前数据库传输到MongoDB,反之亦然。我得到的问题是(简而言之):虽然从MongoDB文档中检索DateTime的方法返回正确的日期/时间,但当分配给我的C#对象的DateTime属性时,它将恢复为01/01/0001 12:00:00 AM,即最小DateTime值。

更多详情:

GetdateTime正在查询MongoDB(rdoc是BSON文档)并返回正确的日期/时间:

Console.WriteLine(GetDateTime(rdoc, "recordedDate"));

输出结果为:

6/3/2010 10:00:00 AM

我将返回的值分配给我的c#对象:

doc.RecordedDate = GetDateTime(rdoc, "recordedDate");

但是当我使用(r是我的c#对象)访问此属性时:

Console.WriteLine(r.UserID + "," + r.DateCreated);

我得到: 123456,1 / 1/0001 12:00:00 AM

我将DateTime字段设置为:

set{ recordedDate = value.ToLocalTime();  }

这里只是提到我在创建c#docs时实际上并没有更新我们的数据库,只是将这些文档保存到内存中然后将它们重新保存到Mongo(不要问),仅用于测试目的。它不应该影响我遇到的问题,所有其他领域都可以正常工作。

我知道BSON和.NET的DateTime对象之间存在一些不匹配(BSON会截断Ticks或其他东西的数量),但如果这导致了我的问题,请不要...

顺便说一句,我三天前才开始使用c#,所以如果我遗漏了一些基本而明显的东西,请轻轻指出:)。

1 个答案:

答案 0 :(得分:0)

您的数据存储方式似乎不匹配。

这是更新属性doc.RecordedDate

doc.RecordedDate = GetDateTime(rdoc, "recordedDate");

但是你正在阅读财产DateCreated

Console.WriteLine(r.UserID + "," + r.DateCreated)

这是写第三个变量'recordedDate':

set{ recordedDate = value.ToLocalTime();  }

你正在写一个名为RecordedDate的东西,但是从一个名为DateCreated的东西中读取。你在哪里实际更新DateCreated? doc.RecordedDate和r.DateCreated之间有什么关系? recordedDate和doc.RecordedDate或r.DateCreated之间的关系是什么?