包含null值的BsonDocument的Newtonsoft.Json.JsonConvert.SerializeOb



下面的测试片段演示了当对象值为null甚至BsonNull.value时,SerializeObject中发生InvalidCastException。如果将该值更改为42,则序列化工作正常。

var bson = new BsonDocument
{
{ "key", null /*BsonNull.Value*/ }
};
// the following fails with an inexplicable InvalidCastException...
var json = Newtonsoft.Json.JsonConvert.SerializeObject(
bson,
new JsonSerializerSettings
{
NullValueHandling = NullValueHandling.Include
});
Console.WriteLine(json);

"使用MongoDB.Bson"one_answers"使用Newtonsoft.Json"生效。Json的版本是v12.0.1。

请注意,我也考虑过使用BsonDocument-ToJson方法,但它显示出其他问题(处理枚举值(,所以我不再将其视为解决方案。

作为一种变通方法,您可以注册如下自定义约定:

ConventionRegistry.Register("IgnoreIfDefault", 
new ConventionPack { new IgnoreIfDefaultConvention(true) }, 
t => true);

这将在序列化和反序列化时将[IgnoreIfDefault]属性隐式应用于所有属性。

相关内容

  • 没有找到相关文章