我有两节课:
公共类ClassA
公共类ClassB (来自另一个命名空间):ClassA
我在ClassA使用方法
public static ClassA Deserialize(string path)
{
ClassA classA;
//classA=code...
return classA;
}我在classB调用了这个方法
public void DoSomething()
{
ClassB classB=(ClassB)ClassA.Deserialize("c:\directory\file.xml);
}方法反序列化可以工作,但我得到错误,不能将ClassA转换为ClassB。
如何处理这个问题?
public static ClassA DeserializeFromXml(string path)
{
XmlSerializer s = new XmlSerializer(typeof(ClassA));
ClaasA h;
TextReader r = new StreamReader(path);
h = (ClassA)s.Deserialize(r);
r.Close();
return h;
}也许是反序列化(字符串路径,类型objectType ) ??
如果有必要,我可以更改方法反序列化。
发布于 2010-03-01 16:21:08
Ais isna B is an A
(ClassB) something_that_is_A不能做,除非它是B或它的导数。
发布于 2010-03-01 16:20:00
如果不显示您的Deserialize代码,就很难说出发生了什么。这很可能是问题的核心--如果您想要将结果转换为ClassB,则需要让Deserialize实际创建ClassB的实例(或派生类)。如果您的Deserialize方法创建了一个ClassA实例,然后设置了一系列属性,那么您需要更改它,或者在以后找到另一种创建ClassB实例的方法。
如果值是对ClassB的实际实例的引用,则只能将表达式强制转换为ClassB。如果对象只是ClassA的一个实例,那么你将不能强制转换--在ClassB中任何额外的字段等会发生什么呢?除非是用户定义的转换,否则对引用类型的强制转换只执行引用转换-它不会创建新的对象。(有关更多详细信息,请参见Eric Lippert's blog post on representation and identity。)
发布于 2010-03-01 16:20:51
您的方法返回一个空函数,因此您尝试将空函数的返回类型转换为ClassB。
https://stackoverflow.com/questions/2354532
复制相似问题