c# – 如果给出T的字符串表示,如何实例化SomeObject的实例?
我们有以下课程……
public class ValueHolder<T> { public T Value { get; set; } public Type ValueType => typeof(T); } …我们当然可以像这样实例化. var foo = new ValueHolder<string>() { Value = "Hello World!" }; var laa = new ValueHolder<int>() { Value = 44 }; 当我们使用NewtonSoft的Json.NET序列化foo和laa时,我们得到以下输出… // foo { "Value": "Hello World!","ValueType": "System.String,mscorlib,Version=4.0.0.0,Culture=neutral,PublicKeyToken=b77a5c561934e089" } // laa { "Value": 44,"ValueType": "System.Int32,PublicKeyToken=b77a5c561934e089" } 问题是反序列化它,因为Json.NET不知道它指的是泛型,所以它会爆炸.因此,我需要为此类编写自定义转换器.但是,我不确定如何实例化一个新的通用实例,其中ValueHolder中用于’T’的数据类型以ValueType中的字符串形式存储. 更多信息 我实际上是在尝试序列化/反序列化Dictionary< string,ValueHolder<>>的子类.对于每个实例,ValueHolder的T可以是不同的(当然你不能这样做我实际上是继承Dictionary< string,object>然后将已解析的ValueHolder放入’对象’)所以我认为正确的方法是把转换器放在字典上而不是ValueHolder本身. 解决方法
要从程序集名称创建新对象,可以使用:
Activator.CreateInstance()方法.请参阅此处的文档: https://msdn.microsoft.com/en-us/library/system.activator.createinstance%28v=vs.110%29.aspx (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |