我正在尝试像在此示例中那样序列化父对象
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类对象。
答案 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。