【问题标题】:CosmosDB SQL Api not persisting Enum values 0CosmosDB SQL Api 不持久化枚举值 0
【发布时间】:2021-01-21 19:51:33
【问题描述】:

问题:

我正在开发一个使用 Cosmos DB 作为我的持久性存储的 .NET Core 5.0 Web 应用程序,当枚举设置为 0(默认值)时,它似乎没有持久化枚举。在下面的代码中,当我创建会话时,默认的 SessionStatus 值为 Planned。如果我将 Session 设置为 InProgress 或 Completed。它在数据库中分别显示为 1 或 2。

我的代码 会话类

public class Session
{
    [JsonProperty("creator_id")]
    public string CreatorId { get; private set; }

    [JsonProperty("session_status")]
    public SessionStatus SessionStatus { get; private set; }
}
public enum SessionStatus
{
    Planned,
    InProgress,
    Completed
}

回购:

var document = await cosmosDbClient.CreateDocumentAsync(session);

CosmosClient:

public async Task<Document> CreateDocumentAsync(object document, RequestOptions options = null,
    bool disableAutomaticIdGeneration = false, CancellationToken cancellationToken = default(CancellationToken))
{
    return await _documentClient.CreateDocumentAsync(
        UriFactory.CreateDocumentCollectionUri(_databaseName, _collectionName), document, options,
        disableAutomaticIdGeneration, cancellationToken);
}

我尝试过的:

  1. 我已尝试设置枚举 json 在枚举对象上转换为在 db 中存储为字符串,但在 db 中 session_status 的行为相同。
  2. 我可以将 SessionStatus 的默认值设置为 1 作为解决方法,但我更愿意理解底层问题。

【问题讨论】:

  • 听起来您使用的 JSON 序列化程序设置为忽略默认值。您可以在那里检查选项,或者如果您只想为此属性设置它,请添加属性[JsonProperty(DefaultValueHandling = DefaultValueHandling.Include)]
  • 成功了!!不知道为什么它不会首先设置为包含......

标签: c# .net-core azure-cosmosdb azure-cosmosdb-sqlapi asp.net-core-5.0


【解决方案1】:

似乎使用的底层 JSON 序列化程序设置为忽略默认值。行为可以在创建 cosmos 数据库的客户端时在选项中指定,但也可以使用 JSON 注释将范围限定为单个参数。

Cosmos v2 和 v3 默认使用序列化程序包 Newtonsoft.Json,您可以在其中对单个参数使用 [JsonProperty(DefaultValueHandling = DefaultValueHandling.Include)] 来始终编写它。

Cosmos v4 默认使用System.Text.Json,您可以使用[JsonIgnore(Condition = JsonIgnoreCondition.Never)] 执行相同操作。

不包含它的原因是读取和写入 CosmosDB 的默认值会消耗一些额外的 RU 并且可能不需要,因为在使用类模型时它会反序列化为其默认值。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-14
    • 2010-10-04
    • 1970-01-01
    • 2010-10-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多