C#继承XmlSerializer

标签 c# xml-serialization

问候,

我有两个类(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/

相关文章:

c# - 如何指定数据库连接的传出 IP 地址?

c# - 将对象序列化并存储在另一个实现 IXmlSerializable 的对象中

c# - 如何保存人类可读的文件

c# - 是否有任何工具可以从 XML 创建类以进行反序列化?

asp.net-mvc - Xml序列化无法写入 'x'类型的对象

c# - 如何从 Web 应用程序在多个客户端上远程执行程序?

c# - 典型的基于浏览器的 Web 解决方案可以利用缓存吗?

c# - Monotouch AVAssetReader

java - 如何以内存高效的方式将 xml 写入 bean 网络流

c# - 在VisualStudio DTE中,如何获取ActiveDocument的内容?