【发布时间】:2015-10-24 12:20:15
【问题描述】:
我们有以下课程...
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, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089"
}
问题在于反序列化它,因为 Json.NET 不知道它指的是泛型,所以它爆炸了。因此,我需要为这个类编写一个自定义转换器。但是,我不确定如何实例化一个新的通用实例,其中 ValueHolder 中用于“T”的数据类型以字符串形式存储在 ValueType 中。
更多信息
我实际上是在尝试序列化/反序列化 Dictionary<string,ValueHolder<>> 的子类,其中每个实例的 ValueHolder 的 T 可能不同(当然你不能这样做,我实际上是在子类化 Dictionary<string,object> 然后把将 ValueHolder 解析为“对象”),所以我认为正确的方法是将转换器放在字典上而不是 ValueHolder 本身上。
【问题讨论】:
-
不清楚你在问什么。你想从字符串形式的类型中创建一个通用实例(类的)(??).. ???对我来说毫无意义。也许举个例子可以说明问题。
-
@Maarten,MakeGenericType 看起来很有趣!用一个例子把它放在一个答案中,你就会得到荣誉。
标签: c# json serialization json.net activator