加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 如果给出T的字符串表示,如何实例化SomeObject的实例?

发布时间:2020-12-15 20:54:08 所属栏目:百科 来源:网络整理
导读:我们有以下课程…… public class ValueHolderT{ public T Value { get; set; } public Type ValueType = typeof(T);} …我们当然可以像这样实例化. var foo = new ValueHolderstring() { Value = "Hello World!" };var laa = new ValueHolderint() { Value
我们有以下课程……

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读