检查 BsonValue 是否不为空

Check if a BsonValue is not null

以 mongo 集合中的以下摘录为例:

{"IsBasedOnProduct" : {
        "CodeUV" : "09184",
        "Name" : null,
        "pricingVersion" : "B"
    }
}

我想从此集合中提取 Name 字段并将其放入 C# 对象中。但我不知道如何管理 null 值。

这就是我在 C# 应用程序中所做的事情:

if (foo.Contains("IsBasedOnProduct"))
{
    fooToExcel.Name = foo["IsBasedOnProduct"].AsBsonDocument.Contains("Name") ? foo["IsBasedOnProduct"]["Name"].AsString : string.Empty;
}

当然,当 Namenull 时,我会抛出一个 System.ArgumentNullException 我该如何修复它以便在值为 null 时放置 string.Empty

使用以下代码快照修复它:

if (foo.Contains("IsBasedOnProduct") && foo["IsBasedOnProduct"].BsonType != BsonType.Null)
{
    fooToExcel.Name = foo["IsBasedOnProduct"].AsBsonDocument.Contains("Name")&& foo["IsBasedOnProduct"]["Name"].BsonType != BsonType.Null ? 
                        foo["IsBasedOnProduct"]["Name"].AsString : string.Empty;
}

在此之前,您必须将 BJson 转换为 JSON,然后检查条件。

正确 还有另一个要检查的解决方案是 BsonValueNULL 使用 IsBsonNull 属性 [因为 MongoDB.Bson 版本 2.3.0]

此处解决方案:

if (foo.Contains("IsBasedOnProduct") && !foo["IsBasedOnProduct"].IsBsonNull)
{
    fooToExcel.Name = (foo["IsBasedOnProduct"].AsBsonDocument.Contains("Name") && !foo["IsBasedOnProduct"]["Name"].IsBsonNull) ? 
                        foo["IsBasedOnProduct"]["Name"].AsString : string.Empty;
}

IsBsonNull属性 的文档 -> https://mongodb.github.io/mongo-csharp-driver/2.3/apidocs/html/P_MongoDB_Bson_BsonValue_IsBsonNull.htm