包含空值的BsonDocument的Newtonsoft.Json.JsonConvert.SerializeObject失败,并显示InvalidCastException

时间:2018-12-04 01:38:50

标签: json mongodb null json.net

以下测试代码片段演示了当对象值为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”和“使用Newtonsoft.Json”有效。 Json版本是v12.0.1。

请注意,我也考虑过使用BsonDocument ToJson方法,但是它还存在其他问题(处理枚举值),因此,我不再将其视为解决方法。

1 个答案:

答案 0 :(得分:0)

作为解决方法,您可以按以下方式注册自定义约定:

'bookmarked'

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