2

この例のように、親オブジェクトをシリアル化しようとしています

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 属性を使用して、静的に認識されていないタイプを指定してください。」私が到達しようとしているのは、子クラスのフィールドなしで真の親クラス オブジェクトを取得することです。

4

2 に答える 2

2

you need to add [XmlInclude(typeof(Child))] to parent class, as:

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

or use following code while initializing XmlSeralializer:

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

for better understanding, see How to XML serialize child class with its base class.

于 2013-06-18T11:09:47.583 に答える