Изменение параметров по умолчанию CosmosSerializationOptions на camelCase вызывает исключение в CosmosDB SDK V4 - PullRequest
1 голос
/ 01 февраля 2020

У меня проблема с CosmosDB SDK V4.0.0-preview3. Когда я пытаюсь изменить значение по умолчанию CosmosSerializationOptions, это вызывает исключение, когда я пытаюсь использовать GetItemQueryIterator. Все остальное, кроме этого метода, работает нормально.

var client = new CosmosClientBuilder(connectionString)
    .WithSerializerOptions(new CosmosSerializationOptions { PropertyNamingPolicy = CosmosPropertyNamingPolicy.CamelCase })
    .Build();
var container = client.GetContainer("SocialNetwork", "Posts"); 
var query = new QueryDefinition("SELECT * FROM c");
await foreach (var item in container.GetItemQueryIterator<Post>(query))
{
    Console.WriteLine(item);
}

Сообщение об исключении:

Unhandled exception. System.ArgumentNullException: Value cannot be null. (Parameter 'source')
   at System.Linq.ThrowHelper.ThrowArgumentNullException(ExceptionArgument argument)
   at System.Linq.Enumerable.ToList[TSource](IEnumerable`1 source)
   at Azure.Cosmos.CosmosResponseFactory.CreateQueryFeedResponseWithSerializer[T](Response cosmosResponseMessage, CosmosSerializer serializer)
   at Azure.Cosmos.CosmosResponseFactory.CreateQueryFeedResponse[T](Response cosmosResponseMessage)
   at Azure.Cosmos.PageIteratorCore`1.GetPageAsync(String continuation, CancellationToken cancellationToken)
   at Azure.Cosmos.PageResponseEnumerator.FuncAsyncPageable`1.AsPages(String continuationToken, Nullable`1 pageSizeHint)+MoveNext()
   at Azure.Cosmos.PageResponseEnumerator.FuncAsyncPageable`1.AsPages(String continuationToken, Nullable`1 pageSizeHint)+System.Threading.Tasks.Sources.IValueTaskSource<System.Boolean>.GetResult()
   at Azure.AsyncPageable`1.GetAsyncEnumerator(CancellationToken cancellationToken)+MoveNext()
   at Azure.AsyncPageable`1.GetAsyncEnumerator(CancellationToken cancellationToken)+MoveNext()
   at Azure.AsyncPageable`1.GetAsyncEnumerator(CancellationToken cancellationToken)+System.Threading.Tasks.Sources.IValueTaskSource<System.Boolean>.GetResult()
   at ConsoleAppCosmosDb.Program.Main(String[] args) in C:\Users\XPS\source\repos\ConsoleAppCosmosDb\ConsoleAppCosmosDb\Program.cs:line 29
   at ConsoleAppCosmosDb.Program.Main(String[] args) in C:\Users\XPS\source\repos\ConsoleAppCosmosDb\ConsoleAppCosmosDb\Program.cs:line 29
   at ConsoleAppCosmosDb.Program.<Main>(String[] args)

Если я удаляю эту опцию или меняю CamelCase на Default, все работает.

1 Ответ

0 голосов
/ 03 февраля 2020

Как объяснено в https://github.com/Azure/azure-cosmos-dotnet-v3/issues/1193, это кажется ошибкой в ​​версии предварительного просмотра V4.

Это в основном связано с состоянием предварительного просмотра V4, в котором некоторые внутренние проводки ожидают переноса.

В настоящее время вы можете обойти это, используя JsonPropertyName в вашем классе Post и использовать дело верблюда там.

...