我在保存到 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/