Сбой IntonsidCastException - Newtonsoft.Json.JsonConvert.SerializeObject объекта BsonDocument, содержащий нулевое значение - PullRequest
0 голосов
/ 04 декабря 2018

В следующем фрагменте теста демонстрируется исключение InvalidCastException, возникающее в SerializeObject, когда значение объекта равно нулю или даже BsonNull.Value.Если значение изменяется на 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 голосов
/ 03 января 2019

В качестве обходного пути вы можете зарегистрировать пользовательское соглашение следующим образом:

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

Это будет неявно применять атрибут [IgnoreIfDefault] ко всем свойствам при сериализации и десериализации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...