Должны ли мои классы Azure DocumentDB наследовать от Microsoft.Azure.Documents.Document? - программирование

Должны ли мои классы Azure DocumentDB наследовать от Microsoft.Azure.Documents.Document?

Я вижу некоторое странное поведение, сохраняющееся в 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;
}

Однако, к моему большому удивлению, когда я сделал это изменение, новые документы были созданы полностью пустыми, за исключением свойства "id", назначенного самим DocumentDB.

Я дважды проверял несколько раз. Получение из документа препятствует сохранению моих пользовательских свойств в документе...

... если я явно не украшу каждый с помощью [JsonProperty], например:

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

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

Затем он снова работает (используя, конечно, новые, более подходящие для JSON имена свойств camelCase). И, после извлечения, объекты заполняются свойством SelfLink, которое мне нужно для обновлений и удалений. Все хорошо.

По моим вопросам... Почему это произошло? Я делаю что-то неправильно, получая документ?. Ваш отзыв будет очень признателен.

4b9b3361

Ответ 1

Это поведение объясняется тем, как JSON.NET работает со свойствами динамических объектов. Он эффективно игнорирует их, если вы не украшаете их атрибутом JsonProperty.

Вы можете либо работать с простым POCO, либо вы можете перейти от ресурса (см. ниже), который является статическим объектом, который сам документ расширяет.

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