Для данного словаря (строка-объект), который может содержать примитивные типы данных, а также типы данных сложного класса, необходимо иметь возможность добавлять дополнительную информацию для некоторых свойств (может быть вложенной) без изменениясуществующие структуры данных в словаре и возможность получать эти метаданные для каждого свойства для последующего использования.Кроме того, эти метаданные должны быть сохранены для последующего использования, а не только во время выполнения, поэтому использование ссылок проблематично.
Решение, которое я пробовал, - сохранить дополнительные метаданные KeyValuePair в словаре.Например, чтобы определить свойство улицы адреса объекта данных как особенное и важное, будет добавлена следующая информация
{ "root.Data.Address.Street", new Dictionary<string, object>()
{
{ "special", true },
{ "important", true }
}}
, чтобы запросить информацию метаданных для свойства, которое мы будем искать для пути этогоСвойство в корне словаря.
Пример случая:
//The data in the dictionary can't be changed or wrapped in some way
Dictionary<string, object> dataObject = new Dictionary<string, object>()
{
{ "Name", "name123"},
{ "Addresses", new List<Address>()
{
new Address("A", "B", 1),
new Address("C", "D", 2)
}
},
{"Data", new Data("123Name", new Address("E", "F", 3))}
};
//Can't be changed
public class Data
{
public string Name { get; }
public Address Address { get; }
public Data(string name, Address address)
{
Name = name;
Address = address;
}
}
//Can't be changed
public class Address
{
public string City { get; }
public string Street { get; }
public int Number { get; }
public Address(string city, string street, int number)
{
City = city;
Street = street;
Number = number;
}
}
Ожидаемое поведение - возможность запрашивать данные как можно ближе к следующему:
dataObject["Data"].Address.Street.special == true
dataObject["Data"].Address.City.important == false
Любые идеи приветствуются