You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何序列化BsonDocument时忽略空字段与空对象?

序列化BsonDocument时忽略空字段与空对象的实现方法

一、忽略Null字段

借助MongoDB .NET Driver的BsonSerializerSettings配置,开启IgnoreNullValues参数即可自动忽略值为null的字段。

示例代码

原数据对应的BsonDocument:

var originalDoc = new BsonDocument
{
    { "key1", BsonNull.Value },
    { "key2", 100 }
};

配置序列化参数并执行序列化:

var serializeSettings = new BsonSerializerSettings
{
    IgnoreNullValues = true
};
var serializedJson = originalDoc.ToJson(serializeSettings);

序列化结果

{
   "key2": 100
}

二、忽略空对象(空BsonDocument)

默认配置不会处理空的BsonDocument,需要手动递归清理文档中的空对象字段,再结合Null忽略配置完成序列化。

空对象清理方法

public static void CleanEmptyBsonDocuments(BsonDocument document)
{
    var keysToRemove = new List<string>();
    foreach (var element in document.Elements)
    {
        // 处理直接的空BsonDocument
        if (element.Value is BsonDocument subDoc && subDoc.ElementCount == 0)
        {
            keysToRemove.Add(element.Name);
            continue;
        }
        // 递归处理嵌套的BsonDocument
        if (element.Value is BsonDocument nestedDoc)
        {
            CleanEmptyBsonDocuments(nestedDoc);
            // 嵌套文档清理后变为空的话,标记移除
            if (nestedDoc.ElementCount == 0)
            {
                keysToRemove.Add(element.Name);
            }
        }
    }
    // 批量移除标记的字段
    foreach (var key in keysToRemove)
    {
        document.Remove(key);
    }
}

示例使用

原数据对应的BsonDocument:

var originalDoc = new BsonDocument
{
    { "key1", new BsonDocument() },
    { "key2", 100 }
};

先清理空对象,再序列化:

CleanEmptyBsonDocuments(originalDoc);
var serializeSettings = new BsonSerializerSettings { IgnoreNullValues = true };
var serializedJson = originalDoc.ToJson(serializeSettings);

序列化结果

{
   "key2": 100
}

内容的提问来源于stack exchange,提问作者JamesL

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 08:22:10