Динамические свойства контрактов

Ряд ресурсов (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 для указания размерности величины. Все свойства объекта - строковые.

ПолеТипОбязательное полеОписание
Keystring
Valuestring
Unitstring размерность


Де-сериализация в класс 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; }   
}