我在Mongo-C#环境中,我们使用Mongo 1.3.x DLL对Mongo进行了一段时间的编码。最近,我把它更新为1.4.2,其他一切都很好,直到我遇到一个问题,我注意到以前版本的Mongo DLL正在处理
update.SetWrapped(property.Name, value);
当值为null但最近版本不喜欢它时所有文件都会抛出null引用异常。
问题在于我希望它能够接受Null值。以前有人遇到过这个问题吗?如果是的话,你是怎么处理的?
答案 0 :(得分:1)
引入这个时有一个突破性的变化。你需要使用BsonNull.Value。所以,你的代码看起来像这样:
update.SetWrapped(property.Name, BsonValue.Create(value) ?? BsonNull.Value);
答案 1 :(得分:0)
我相信你应该能够将C#null传递给Update.SetWrapped< T>因为T是POCO而不是BsonValue,而T的序列化器将决定如何序列化C#null。
我为此创建了一张JIRA票:
https://jira.mongodb.org/browse/CSHARP-486
请注意,虽然早于1.4的C#驱动程序版本没有抛出NullReferenceException,但它们也没有像您预期的那样将属性更新为BSON null(将C#null传递给SetWrapped,在早期版本中将SetWrapped转换为no-op )。
C#null处理的基本规则很明确: