如何序列化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
相关产品推荐
相关产品推荐

