0

我在 Mongo-C# 环境中,我们一直在使用 Mongo 1.3.x DLL 对 Mongo 进行编码。最近,我将它更新为 1.4.2,其他一切都很好,直到我遇到一个问题,我注意到以前版本的 Mongo DLL 正在处理

update.SetWrapped(property.Name, value);

值为 null 但最新版本不喜欢它时的所有文件,它会引发 nullreference 异常。

这里的问题是我希望它能够接受 Null 值。以前有人遇到过这个问题吗?如果是,您是如何处理的?

4

2 回答 2

1

引入此功能时发生了重大变化。您需要为此使用 BsonNull.Value 。因此,您的代码将如下所示:

update.SetWrapped(property.Name, BsonValue.Create(value) ?? BsonNull.Value);
于 2012-05-24T01:54:39.503 回答
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 在早期版本中变为无操作)。

C# null 处理的基本规则很明确:

  1. C# null 不是有效的 BsonValue,请改用 BsonNull.Value
  2. C# null 对 POCO 有效,并且可能会被序列化为 BSON null(尽管从技术上讲,POCO 的序列化程序可以选择不同的表示形式)
于 2012-06-04T15:21:39.950 回答