父对象的序列化

时间:2013-06-18 10:58:16

标签: c# .net

我正在尝试像在此示例中那样序列化父对象

static void Main(string[] args)
    {
        Child child = new Child
            {
                Id = 5,
                Name = "John",
                Address = "Address"
            };

        Parent parent = child;

        XmlSerializer serializer =new XmlSerializer(typeof(Parent));
        Stream stream=new MemoryStream();

        serializer.Serialize(stream,parent); //this line throws exception 

        Parent p2 = (Parent) serializer.Deserialize(stream);

        Console.ReadKey();
    }
}

[Serializable]
public class Parent
{
    public int Id { get; set; }
    public string Name { get; set; }
}

[Serializable]
public class Child : Parent
{
    public string Address { get; set; }
}

我得到的异常文本是“不期望类型CastParrentExample.Child。使用XmlInclude或SoapInclude属性指定静态未知的类型。” 我想要达到的是获得没有Child类字段的真正的Parent类对象。

2 个答案:

答案 0 :(得分:2)

在Parent类添加属性

[XmlInclude(typeof(Child))]
class Parent {
...

答案 1 :(得分:2)

您需要将[XmlInclude(typeof(Child))]添加到父类,如:

[XmlInclude(typeof(Child))]
public class Parent
{
    public int Id { get; set; }
    public string Name { get; set; }
}

或在初始化XmlSeralializer时使用以下代码:

XmlSerializer serializer =new XmlSeralializer(typeof(Parent), new[] {typeof(Child)})

为了更好地理解,请参阅How to XML serialize child class with its base class