Ben*_*ter 1 .net c# serialization
我从数据库中提取序列化数据以及对象类型(其中一个字段包含对象类型,一个字段包含序列化数据的XML字符串).
我有一个具有序列化和反序列化方法的通用序列化程序:
public static class Serializer<T>
{
public static string Serialize(T objectData) { }
public static T Deserialize(string xmlData) { }
}
Run Code Online (Sandbox Code Playgroud)
鉴于在数据库字段中指定了对象类型,有没有办法让我动态设置T是什么? - 这是我的想法(尽管这不起作用):
Type t = Type.GetType(objectTypeName);
t objData = Serializer<t>.Deserialize(objectXmlString);
Run Code Online (Sandbox Code Playgroud)
我希望从switch语句中重构一些代码,其中T是一个设定值,但我无法弄清楚它是否可以完成,或者如果是这样,我将如何去做.
提前致谢.
你可以做到这一点,但它涉及反思 - MakeGenericType特别是:
typeof(Serializer<>).MakeGenericType(t).GetMethod("Deserialize").Invoke(...);
Run Code Online (Sandbox Code Playgroud)
我还没有完成,因为你的例子令人困惑; 该方法是实例,但被称为静态.
有趣的是(或许),dynamic可能会在4.0中使这更容易 - 我没有我的VM,但想象:
static void SomeGenericMethod<T>(T arg) { Serializer<T>.SomeMethod(arg); }
...
dynamic obj = ...
SomeGenericMethod(obj);
Run Code Online (Sandbox Code Playgroud)
我需要检查一下,但我希望能为我们做很多繁重的工作.
另一种常见的方法是公开在a上工作的方法Type,而不是通过泛型.