Rog*_*ruz 9 .net c# azure azure-cosmosdb
我现在开始使用 CosmosDB,在尝试在数据库中插入一些数据时遇到以下错误:
The input content is invalid because the required properties - 'id; ' - are missing.
Run Code Online (Sandbox Code Playgroud)
我知道我的文档中应该有一个string被调用的字段,但即使在我将注释id添加到对象的字段后,错误仍然存在。[JsonPropertyName("id")]Id
这是对 CosmosDB 的调用:
var insertionResponse = await container.CreateItemAsync<Article>(
item: article,
partitionKey: new PartitionKey(article.Id.ToString())
);
Run Code Online (Sandbox Code Playgroud)
这是Article课程:
public partial class Article
{
[JsonPropertyName("id")]
public Guid Id { get; set; }
public Guid CreatedBy { get; set; }
public DateTime CreatedOn { get; set; }
public string Title { get; set; }
public string Body { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
有什么想法为什么会发生这种情况吗?
Gau*_*tri 10
发生此问题的原因是您的代码和 SDK 使用了不同的 JSON 库。您的代码正在使用System.Text.Json,而 SDKNewtonsoft.Json默认情况下使用序列化/反序列化。因此,SDK 无法理解[JsonPropertyName("id")]属性,也无法正确序列化文档。
2 可能的解决方案:
使用Newtonsoft.Json而不是System.Text.Json.
配置 SDK 以用于System.Text.Json序列化/反序列化。请参阅此链接了解更多详细信息:https://github.com/ealsur/ondotnet-cosmosdb/tree/master/src/episode1/customserializer。
更新
不久前我遇到了完全相同的问题,并联系了 Cosmos DB SDK 团队成员之一。他向我指出了我在上面 #2 中分享的链接。他提到的警告是,System.Text.Json如果您使用 LINQ 查询,则 using 可能不起作用。
其他替代方案(尽管不推荐)是使用 Cosmos DB SDK 版本 4,它默认使用 System.Text.Json。它目前处于预览阶段,根据 SDK 团队的评论,发布日期尚未确定。此外,截至目前,并非 SDK 版本 3 中提供的所有功能在版本 4 中都可用(因此上面的“不推荐”评论)。
更新2
有一个更好的实现(比我之前在 #2 中分享的实现)将 System.Text.Json 与 Cosmos DB SDK v3 结合使用。请参阅此链接了解更多详细信息:https://github.com/Azure/azure-cosmos-dotnet-v3/tree/master/Microsoft.Azure.Cosmos.Samples/Usage/SystemTextJson。
| 归档时间: |
|
| 查看次数: |
2096 次 |
| 最近记录: |