Ряд ресурсов (Subscription, Profile) могут обладать произвольным набором свойств, специфичным для конкретного вендора. К примеру, вендору №1 необходимо передавать при создании пользователя дополнительный e-mail вместе с основным контрактом, а вендору №2 необходим точный рост пользователя. Для того, чтобы минимизировать изменения основного контракта и логически отделить подобные динамические свойства, предлагается держать в контракте свойство DynamicProperties, представляющее собой массив объектов типа DynamicProperty:
{
"Id": "3a0ae92f-f5f1-4349-9d51-fdb7d971602b",
...
"DynamicProperties":
[
{
"Key": "Nickname",
"Value": "zoo"
},
{
"Key": "IQ",
"Value": "199"
},
{
"Key": "Weight",
"Value": "333",
"Unit": "kg"
}
]
}
По своей сути, объект типа DynamicProperty - это пара ключ-значение с необязательным свойством Unit для указания размерности величины. Все свойства объекта - строковые.
| Поле | Тип | Обязательное поле | Описание |
|---|---|---|---|
| Key | string | ✔ | |
| Value | string | ✔ | |
| Unit | string | размерность |
Де-сериализация в класс C#.NET:
public class Form { public string Id { get; set; } public DynamicProperty[] DynamicProperties { get; set; } } public class DynamicProperty { public string Key { get; set; } public string Value { get; set; } public string Unit { get; set; } }