【问题标题】:Azure Document Client ignores JsonProperty attributeAzure 文档客户端忽略 JsonProperty 属性
【发布时间】:2020-03-31 14:37:55
【问题描述】:

我使用 Azure Function 应用程序。在应用程序中,我使用包 Microsoft.Azure.DocumentDB v2.9.2 来使用 CommosDB。我的实体是:

public abstract class Entity
{
    [JsonProperty("id")]
    public string id { get; set; }
}

public class MyLog : Entity
{
    [JsonProperty("createDate")]
    public DateTime CreateDate { get; set; }
}

当我用Newtonsoft.Json 序列化MyLog 时,我看到CreateDate 属性是驼峰式风格,看起来与JsonProperty 中提到的完全一样,但是当我通过CreateDocumentAsync 方法将我的实体写入CosmosDB 时,我看到了CreateDate 现在是帕斯卡大小写,看起来像 CreateDate。想提一下,没有使用ContractResolver。我找不到任何其他可以将帕斯卡案例应用于实体序列化的地方。

[更新]

当我运行测试时,我发现 DB 中的属性命名是正确的(考虑到 JsonProperty)。仅当 azure func 写入 DB 时才会出错

var policy = new ConnectionPolicy();
policy.PreferredLocations.Add("Germany North");
documentClient = new DocumentClient(endPoint, key, policy);
await documentClient.OpenAsync();

...

await documentClient.CreateDocumentAsync(UriFactory.CreateDocumentCollectionUri(databaseName, collectionName), document);

[/UPDATE]

有人能建议哪些其他选项会导致这种行为吗?

【问题讨论】:

  • 为什么在 CosmosDB 中需要将文档字段设为驼峰式?
  • @Oliver 实际上我不在这里做决定,我对现有项目进行重构,只需要找出这种行为的原因。
  • 是否按照here 的描述配置了自定义序列化程序?
  • @Oliver 提到 doc 使用了一些不同的客户端,在我的例子中是 DocumentClient,但是在选项中没有指定特殊的序列化程序,此外,当我运行测试时,我发现 DB 中的属性命名是正确的。只有当 azure func 写入 DB 时才会出错
  • @Oliver 使用 DocumentClient 创建代码更新了任务。

标签: c# azure-cosmosdb .net-4.7.2


【解决方案1】:

所以,我找到了这种行为的原因。默认情况下,带有 .NET 4.7.2 的 Azure Function v1 使用 DataContractJsonSerializer,并且不考虑 JsonProperty 属性。测试使用 NewtonSoft json 序列化程序,这就是使用属性的原因。

【讨论】:

  • 我刚回来看这个。很高兴你整理好了。您可以在回答中参考任何文档吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-02-23
  • 1970-01-01
  • 2017-08-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多