c# - 我的 Azure DocumentDB 文档类是否应该继承自 Microsoft.Azure.Documents.Document?

标签 c# json azure azure-cosmosdb

我在保存到 DocumentDB 时看到一些奇怪的行为。我开始使用一个普通的旧类来保存文档,如下所示:

public class Person
{
    public string Name;
    public int Age;
}

我这样保存这些文档:

var person = new Person { ... };
client.CreateDocumentAsync(myCollectionLink, person);

这工作得很好。属性以类中的名称准确保存。然后我意识到我需要文档的 SelfLink 才能执行更新和删除。 “啊,”我想。 “我将从文档中派生,如下所示:

public class Person: Microsoft.Azure.Documents.Document
{
    public string Name;
    public int Age;
}

然而,令我惊讶的是,当我进行此更改时,除了 DocumentDB 本身分配的“id”属性之外,新文档被创建为完全空白。

我仔细检查了多次。从文档派生会阻止保存文档中的自定义属性...

...除非我明确地用 [JsonProperty] 装饰每个属性,如下所示:

public class Person: Document
{
    [JsonProperty(PropertyName="name")]
    public string Name;

    [JsonProperty(PropertyName="age")]
    public int Age;
}

然后它再次工作(当然,使用新的更适合 JSON 的驼峰命名法属性名称)。并且,在检索时,对象会填充我更新和删除所需的 SelfLink 属性。一切都好。

我的问题是...为什么会发生这种情况?我从文档中派生是否做错了什么?非常感谢您的反馈。

最佳答案

此行为归因于 JSON.NET 处理动态对象属性的方式。 除非您使用 JsonProperty 属性修饰它们,否则它实际上会忽略它们。

您可以使用普通 POCO,也可以从 Resource(如下所示)进行扩展,Resource 是 Document 本身扩展的静态对象。

public class Person: Microsoft.Azure.Documents.Resource
{
    public string Name;
    public int Age;
}

关于c# - 我的 Azure DocumentDB 文档类是否应该继承自 Microsoft.Azure.Documents.Document?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30091519/

相关文章:

c# - 在内存中创建 Web api 服务器时,路由未正确映射

c# - 如何在 .NET 中检索已登录/已连接用户的列表?

json - 使用 mongoimport 导入超过 1 个 json 文件

python - 如何使用 Python 从 JSON 获取单个键的值列表

json - 基于 Swift Decodable 对象属性中的键的模型关系

c# - 如果System.Double将常量字段 "NaN"初始化为double.NaN,是不是意味着 "Double"和 "double"指的不是同一个类型?

c# - 循环遍历两个并发字典的 Lambda 表达式

Azure WebJobs NuGet 包错误

java - 如何使用 REST Api 在 IoT 中心注册新设备

azure - WP Silverlight 后台任务与 Azure 的通信