Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 父对象的序列化_C#_.net - Fatal编程技术网

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指定)很容易。可能重复“您必须创建一个新的父对象并从子对象中的相应属性分配其属性”你能为一个庞大的班级推荐一个简单的方法吗?也许是反思?