==== Динамические свойства контрактов ====
Ряд ресурсов (''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; }
}