微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐