SDK

PR #561: GetItemLinqQueryable now works with null query
Azure Cosmos DB .NET SDK Version 3.0 のバグ情報。

GetItemLinqQueryableを使っているときに、結果がNULLになると例外が発生するバグ修正がマージされました。
次ようなコードがあったときに、ItemがNullになると例外が発生します。

var allObjects = this.container.GetItemLinqQueryable<ExampleObject>(true).ToList();

SDK

元ネタ:ISSUE:#550 serializerSettings with v3 client

Version 2までは、Clientにシリアライザの設定をすることができました。

var serializerSettings = new JsonSerializerSettings { NullValueHandling = NullValueHandling.Ignore };

this.client = new DocumentClient(new Uri(this.options.CosmosDbEndPoint), this.options.CosmosDbKey, serializerSettings: serializerSettings);

しかし、2019/07/16段階では、Version 3ではカスタム設定が削除され、カスタムのシリアライザを設定できるようになりました。

参考:シリアライザの設定

参考:既定のシリアライザの実装

既定のシリアライザの設定を変更する方法を提供しない理由はないので、ISSUEとしてあがりました。

ISSUE:#551 Add support for JsonSerializerSettings on default serializer

カスタムシリアライザの使用方法

サンプル:https://github.com/Azure/azure-cosmos-dotnet-v3/pull/560/files

  1. CosmosSerializerを継承してカスタムシリアライザクラスを作成する。
  2. CosmosClientOptionsで、Serializerに作成したカスタムシリアライザクラスのインスタンスを渡す
  3. CosmosClientのインスタンス作成時にOptionを渡す

class JsonSerializerIgnoreNull : CosmosSerializer
{
    ……..
}

CosmosClientOptions options = new CosmosClientOptions()
{
     Serializer = new JsonSerializerIgnoreNull(),
};

CosmosClient client = new CosmosClient(endpoint, key, options)