有没有办法object
在运行时对某个特定类型进行类型转换?有可能吗?
public static void TryTypeCasting(object obj)
{
Type type = obj.GetType();
// Can I use this "type" variable somehow to typecast "obj" to its actual type?
}
我正在使用 C# 4.0。
编辑1:
感谢大家的投入。
我可能正在努力实现一些不可能的事情。但我发布这个问题是为了获得专家对此的看法,并了解在 C# 4.0 中是否可以实现这样的事情。
这是一个实时问题:
在我们的产品中,我们的客户端 API(方法)序列化Employee
派生自我们的实体类的“某些”类(例如 )的实例Person
。该序列化实例(即字符串值)通过一些中间类发送到服务器端 API(一种负责将字符串反序列化为适当类的实例的方法)。所以,在服务器端,API 得到的唯一东西就是一个字符串。
但是,在序列化时,自定义序列化程序总是添加类的完全限定名称(其实例正在被序列化)作为结果输出的第一行。所以在服务器端,在阅读第一行时,我知道Employee
字符串应该被反序列化到的类(即在这种情况下)。
此外,我们调用一个接受类型参数的Web 服务方法(我不允许更改Person
) 。
现在,在这个阶段反序列化之后,我有一个Employee
存储在类型变量中的实例object
。但即使实例可用,我也无法将它作为参数传递,直到我将其类型转换为Employee
. 我怎样才能做到这一点?
此处提供了示例代码:
public static void Deserialize(string serializedObject)
{
StringReader stringReader = new StringReader(serializedObject);
// Read the first line to know class and assembly details
string firstLine = stringReader.ReadLine();
string[] assemblyAndClassDetails = firstLine.Split(new[] { ',' }, StringSplitOptions.None);
string className = assemblyAndClassDetails[0];
string assemblyName = assemblyAndClassDetails[1];
// Remove the first line before passing it to the serializer
serializedObject = serializedObject.Remove(0, firstLine.Length);
// Know the type of the serialized instance
Type typeToBeDeserializedTo = Type.GetType(className);
DataContractJsonSerializer dataContractJsonSerializer = new DataContractJsonSerializer(typeToBeDeserializedTo);
using(MemoryStream memoryStream = new MemoryStream(Encoding.ASCII.GetBytes(serializedObject)))
{
memoryStream.Position = 0;
object deserializedObject = dataContractJsonSerializer.ReadObject(memoryStream);
// NOW I WANT TO call a method that accepts an argument of type `Person` How can I do this?
}
}