【发布时间】:2018-05-15 00:36:33
【问题描述】:
我有一个带有静态字段和 json 的静态类。
我可以将 json 反序列化为动态对象,因此我拥有所有字段,并且它们与类中的静态字段完全匹配。
如何使用反射枚举字段并将值从动态类复制到静态类字段?
我无法更改架构,使其成为单例等;它是共享代码,并且类将保持静态,因为它是共享库使用的全局共享设置对象。
解决方案需要使用反射,因为随着时间的推移,类会随着新成员的出现而演变。否则我可以编写一个自定义的反序列化器。
添加更多细节,但确实不多:
我有这个静态类:
static class A
{
static int I;
static string S;
}
以及与字段完全匹配的 json:
{
"I" : 3,
"S" : "hello"
}
var Data = JsonConvert.Deserialize<dynamic>(...);
我想用我从 json 反序列化的值将 A 类的静态字段初始化为一个动态对象。
另一个编辑:
我想出了类似于大卫写的东西,但是效率较低,因为我使用反序列化器来转换类型,所以大卫的解决方案更好。
这是我想出的:
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);
}
【问题讨论】:
-
在minimal reproducible example中显示代码,以便我们更好地理解问题。
-
你不需要直接使用反射,只需使用动态JSON解析例如
JToken.Parse。然后手动分配字段 -
我添加了更多细节
-
@Camilo,我可以用jtoken.parse方法解析json,但是如何将每个值转换为静态类中匹配字段的类型?
标签: c# reflection