我正在尝试建立一个解决方案,以解决不知道我正在处理哪种设置类型的问题。
我有一个Dictionary<string, Type>
(我最初想做成<string, class>
,但是那没用)
我要填写设置代码和附加的类的类型,即
{ "person_customField", typeof(CustomFieldModel) }
为什么要执行此操作是因为我的数据库中有一个字段,其中填充了json数据,应将其反序列化为List<>
,但是在获取对象之前,我不知道它是什么样的设置从数据库中。我可以使用Code
字段来确定它是什么类型(person_CustomField
应该使用CustomFieldModel
类,但是emailSetting
应该使用EmailSettingModel
来匹配参数。
是否有一种方法可以成功使该语句起作用?
JsonConvert.DeserializeObject<List<SettingTypes[record.SettingCode]>>(record.SettingValues).ToList<ISetting>()
还是应该改走其他路线
代码示例:
public static readonly Dictionary<string, Type> SettingTypes = new Dictionary<string, Type>()
{
{ "person_CustomFields", typeof(CustomFieldModel)},
};
public static TenantSettingEdit ConvertToTenantSettingEdit(this T_TenantSetting rec)
{
var test = SettingTypes[rec.TENS_Code];
TenantSettingEdit item = new TenantSettingEdit()
{
IDToken = rec.TENS_TenantSettingID.toVirtualGuid().ToString(),
Code = rec.TENS_Code,
Settings = JsonConvert.DeserializeObject<List<SettingTypes[rec.TENS_Code]>>(rec.TENS_Setting).ToList<ITenantSetting>(),
IsActive = rec.TENS_ActiveRec,
};
return item;
}
(我以前使用PHP进行过此操作,但不确定C#是否可以远程实现)
答案 0 :(得分:1)
为什么要这样做是因为我的数据库中有一个字段已填写 与应该反序列化为List <>的json数据,但我没有 知道它是什么样的设置,直到我从 数据库。
如果您使用Json.Net进行JSON序列化/反序列化,则可以使用TypeNameHandling属性将Type信息嵌入到生成的JSON中。 Json.Net可以反序列化JSON,而无需其他信息。如果有必要将自定义值映射到类型而不是自动生成的值,则可以使用SerializationBinder(签出this答案)。
如果这些都不对您有帮助,您仍然可以按照M Kloster的描述进行反思。
答案 1 :(得分:0)
不能在代码中使用变量作为类型参数。您需要做的是通过反射生成特定于类型的方法:
Exception calling "ReadAllText" with "1" argument(s): "Can't find the file 'D:\Usuarios\<MyUserName>\EXPORT.txt'."