问候,
我有两个类(class):
[Serializable]
public class FireGridUnit
{
public GridUnit FireGridLocation { get; set; }
}
[Serializable]
public class FireResult: FireGridUnit
{
public bool Hit { get; set; }
public bool ShipDestroyed { get; set; }
public Ship.ValidShips DestroyedShipType {get; set;}
public bool Win { get; set; }
}
如您所见,FireResult 继承了 FireGrdUnit。
在我的代码中,当我尝试使用它们时出现运行时错误:
Unable to cast object of type 'NietzscheBattleships.FireGridUnit' to type 'NietzscheBattleships.FireResult'.
这是因为如果我正在序列化,类必须是独立的,即不能被继承?
非常感谢。
编辑:
它发生在这里:
XmlSerializer ss;
StringWriter ww;
ss = new XmlSerializer(typeof(FireResult));
ww = new StringWriter();
ss.Serialize(ww, fireGridUnit);
MessageBox.Show("hello");
MessageBox.Show(ww.ToString());
它给出了提到的错误。如果我把它拿出来,它就会运行,但显然没有做它想做的事。
编辑:我弄错了!
ss.Serialize(ww, fireGridUnit); should be ss.Serialize(ww, fireResult);
谢谢。
最佳答案
[Serializable]
在这里什么都不做(XmlSerializer
不关心);假设真正的问题出在序列化 API(不仅仅是强制转换),那么:
[XmlInclude(typeof(FireResult))]
public class FireGridUnit {...}
然后使用它,像这样:
XmlSerializer ser = new XmlSerializer(typeof(FireGridUnit));
using (MemoryStream ms = new MemoryStream())
{
ser.Serialize(ms, new FireResult { Hit = true });
ms.Position = 0;
FireGridUnit fr = (FireGridUnit)ser.Deserialize(ms);
Debug.WriteLine(fr is FireResult); // true
}
关于C#继承XmlSerializer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2493973/