代码之家  ›  专栏  ›  技术社区  ›  BenAlabaster

我可以实现一个泛型类型并向它传递一个只有在运行时才知道的类型吗?

  •  1
  • BenAlabaster  · 技术社区  · 16 年前

    我有一个具有序列化和反序列化方法的通用序列化程序:

    public static class Serializer<T>
    {
        public static string Serialize(T objectData) { }
        public static T Deserialize(string xmlData) { }
    }
    

    考虑到对象类型是在数据库字段中指定的,那么我是否可以动态设置T是什么这是我的想法(尽管这不起作用):

    Type t = Type.GetType(objectTypeName);
    t objData = Serializer<t>.Deserialize(objectXmlString);
    

    我希望从switch语句中重构一些代码,其中T是一个集合值,但我不知道是否可以,或者如果可以,我将如何进行。

    提前谢谢。

    2 回复  |  直到 16 年前
        1
  •  5
  •   Marc Gravell    16 年前

    你可以这样做,但这需要反思- MakeGenericType ,特别是:

    typeof(Serializer<>).MakeGenericType(t).GetMethod("Deserialize").Invoke(...);
    

    我还没有完成,因为你的例子令人困惑;该方法是实例,但被调用时就好像它是静态的一样。

    dynamic

    static void SomeGenericMethod<T>(T arg) { Serializer<T>.SomeMethod(arg); }
    ...
    dynamic obj = ...
    SomeGenericMethod(obj);
    

    期待

    另一种常见的方法是公开在 Type

        2
  •  0
  •   Christian Hayter    16 年前

    public string Serialize(Type objectType, object objectData) { }
    public object Deserialize(Type objectType, string xmlData) { }
    

    NET中的序列化API全部采用 Type