C# 父对象的序列化
我正在尝试序列化父对象,如本例中所示C# 父对象的序列化,c#,.net,C#,.net,我正在尝试序列化父对象,如本例中所示 static void Main(string[] args) { Child child = new Child { Id = 5, Name = "John", Address = "Address" }; Parent parent = child;
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类型不是预期的。请使用xmlclude或SoapInclude属性指定静态未知的类型。”
我试图达到的目的是获得没有子类字段的真正父类对象。在父类添加属性
[XmlInclude(typeof(Child))]
class Parent {
...
在父类中添加属性
[XmlInclude(typeof(Child))]
class Parent {
...
您需要将
[xmlclude(typeof(Child))]
添加到父类中,如下所示:
[XmlInclude(typeof(Child))]
public class Parent
{
public int Id { get; set; }
public string Name { get; set; }
}
或在初始化XMLSeralizer时使用以下代码:
XmlSerializer serializer =new XmlSeralializer(typeof(Parent), new[] {typeof(Child)})
为了更好地理解,请参见。您需要向父类添加
[xmlclude(typeof(Child))]
,如下所示:
[XmlInclude(typeof(Child))]
public class Parent
{
public int Id { get; set; }
public string Name { get; set; }
}
或在初始化XMLSeralizer时使用以下代码:
XmlSerializer serializer =new XmlSeralializer(typeof(Parent), new[] {typeof(Child)})
为了更好地理解,请参见。通过指定引用,您无法获得“真实”父对象。您必须创建一个新的父对象,并根据子对象中的相应属性指定其属性。与XML序列化相比,手工操作更好,这并不是说在反序列化时让XML序列化程序忽略序列化对象的实际类型(在XML中通过xsi:type指定)很容易。可能重复“您必须创建一个新的父对象并从子对象中的相应属性分配其属性”你能为一个庞大的班级推荐一个简单的方法吗?可能是反射?通过指定引用,您无法获得“真实”父对象。您必须创建一个新的父对象,并根据子对象中的相应属性指定其属性。与XML序列化相比,手工操作更好,这并不是说在反序列化时让XML序列化程序忽略序列化对象的实际类型(在XML中通过xsi:type指定)很容易。可能重复“您必须创建一个新的父对象并从子对象中的相应属性分配其属性”你能为一个庞大的班级推荐一个简单的方法吗?也许是反思?