В какой-то момент я могу измениться привязанные свойства новые во время выполнения, а затем обновляют базу данных. Дело в том, что когда мне нужно, у класса может быть больше свойств, которые не должны быть привязаны и не должны быть сериализованы. Поэтому я сохраняю IConfiguration как свойство моего класса. Другая причина, по которой я использую этот подход, заключается в том, что мне нужно создать экземпляры других дочерних классов из класса, который загрузил конфигурации, и сохранить их в базе данных, когда я это сделаю.
Дело в том, что что когда я сериализую IConfiguration, я получаю только пустую строку json типа "{}".
Полагаю, я мог бы проделать некоторые махинации, используя .AsEnumerable(), но нет ли лучшего способа?
Мой пример кода будет выглядеть примерно так
Код: Выделить всё
public class ConfigurableClass
{
public int ChildrenCount { get; set; } = 1069;
public bool IsFast { get; set; } = false;
public bool HasChildren { get; set; } = false;
public int Id { get; }
public ConfigurableClass(int id) { Id = id; }
}
static void Main(string[] args)
{
IEnumerable configs = SqlConfigLoader.LoadConfig();
foreach (var str in configs)
{
Console.WriteLine("Parsing new Config:");
var builder = new ConfigurationBuilder();
IConfiguration cfg = builder.AddJsonStream(new MemoryStream(Encoding.Default.GetBytes(str)))
.Build();
var stepExample = new ConfigurableClass(9);
cfg.Bind(stepExample);
//do work with the class that might change the value of binded properties
var updatedCfg = cfg;
Console.WriteLine(JsonSerializer.Serialize(updatedCfg));
Console.WriteLine();
}
Console.ReadLine();
}
Я также попробовал другой подход, преобразовав IConfiguration во вложенный словарь, подобный этому
Код: Выделить всё
ublic static class IConfigurationExtensions
{
public static Dictionary ToNestedDicionary(this IConfiguration configuration)
{
var result = new Dictionary();
var children = configuration.GetChildren();
if (children.Any())
foreach (var child in children)
result.Add(child.Key, child.ToNestedDicionary());
else
if(configuration is IConfigurationSection section)
result.Add(section.Key, section.Get(typeof(object)));
return result;
}
}
если я сериализую результирующий словарь, я получу что-то вроде «Свойство»: «True» вместо «Собственность»: true
Подробнее здесь: https://stackoverflow.com/questions/627 ... ck-to-json