c# - 从类型创建泛型类的实例

标签 c# generics

我有这个类,它有一个返回对象的方法:

public class Deserializer<T>
{
    public static T FromJson(string json)
    {
        return new JavaScriptSerializer().Deserialize<T>(json);
    }   
}

我有一个类型。如何基于此类型创建 Deserializer 类的实例?以下显然不起作用:

var type = typeOf(MyObject);
var foo = Deserializer<type>.FromJson(json);

最佳答案

您也可以为在编译时不知道类型的消费者提供非泛型版本(顺便说一句,当您公开 API 时,这是一个很好的做法):

public class Deserializer
{
    public static T FromJson<T>(string json)
    {
        return new JavaScriptSerializer().Deserialize<T>(json);
    }

    public static object FromJson(string json, Type type)
    {
        return new JavaScriptSerializer().Deserialize(json, type);
    }
}

现在,在编译时知道类型的消费者:

Foo foo = Deserializer.FromJson<Foo>(json);

以及在编译时不知道类型的消费者:

Type type = ...
object instance = Deserializer.FromJson(json, type);

关于c# - 从类型创建泛型类的实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12045468/

相关文章:

java - 将运行时解析的参数传递给具有多个绑定(bind)类型的方法,编译错误

generics - 类型成员的包装

c# - 无法将 List<Foo> 传递给需要 List<IFoo> 的方法,其中 Foo : IFoo

c# - csla 验证错误 : Insert is an Invalid Operation

c# - 在 Windows Mobile 上使用 C# 和 C 或 C++ 的区别

c# - 如何将批量文本插入 WatiN 中的文本字段

c# - 属性组件

c# - foreach 与 someList.ForEach(){}

c# - 如果 Entity Framework/DbContext 是 DAL/Repository,它在 3 层架构中的什么位置?

java - 在运行时创建具有反射和泛型的类的数组