У меня есть статический класс со статическими полями и json.
Я могу десериализовать json в динамический объект, поэтому у меня есть все поля, и они точно соответствуют статическим полям в классе.
Как я могу использовать отражение, чтобы перечислить поля и скопировать значения из динамического класса в поля статического класса?
Я не могу изменить архитектуру, сделать ее одиночной и т. Д .; это общий код, и класс будет оставаться статическим, поскольку это глобально используемый объект настроек, используемый общей библиотекой.
В решении необходимо использовать рефлексию, поскольку класс со временем эволюционирует с новыми членами. В противном случае я мог бы написать собственный десериализатор.
Добавление более подробной информации, но на самом деле не так много:
У меня есть статический класс:
static class A
{
static int I;
static string S;
}
и JSON, точно совпадающий с полями:
{
"I" : 3,
"S" : "hello"
}
var Data = JsonConvert.Deserialize<dynamic>(...);
Я хотел бы инициализировать статические поля класса A значениями, десериализованными из json, в динамический объект.
Другое редактирование:
Я придумал нечто похожее на то, что написал Дэвид, но это менее эффективно, поскольку я использую десериализатор для преобразования типов, поэтому решение Дэвида лучше.
вот что я придумал:
foreach (var Destination in typeof(Settings).GetProperties())
{
var Name = Destination.Name;
var T = Destination.PropertyType;
var Value = JsonConvert.DeserializeObject("\"" + JT[Name] + "\"", T);
Destination.SetValue(null, Value);
}