使用字典<string,键入=“”>以将值用作列表的类型

时间:2018-07-25 10:12:38

标签: c# list dictionary generics

我正在尝试建立一个解决方案,以解决不知道我正在处理哪种设置类型的问题。

我有一个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#是否可以远程实现)

2 个答案:

答案 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'."