Используя XmlSerializer для сериализации производных классов

Редактировать и продолжить не поддерживается в проектах веб-сайтов. Если это важно для вас, я предлагаю перейти к проектам веб-приложений.

19
задан skaffman 29 October 2009 в 11:53
поделиться

2 ответа

Есть три способа сделать это; либо вы можете использовать [XmlInclude] для типа, либо вы можете использовать XmlElement / XmlArrayItem для свойства. Все они показаны ниже; раскомментируйте предпочтительную пару:

using System;
using System.Collections.Generic;
using System.Xml.Serialization;
public class MyWrapper {
    //2: [XmlElement("A", Type = typeof(ChildA))]
    //2: [XmlElement("B", Type = typeof(ChildB))]
    //3: [XmlArrayItem("A", Type = typeof(ChildA))]
    //3: [XmlArrayItem("B", Type = typeof(ChildB))]
    public List<ChildClass> Data { get; set; }
}
//1: [XmlInclude(typeof(ChildA))]
//1: [XmlInclude(typeof(ChildB))]
public abstract class ChildClass {
    public string ChildProp { get; set; }
}
public class ChildA : ChildClass {
    public string AProp { get; set; }
}
public class ChildB : ChildClass {
    public string BProp { get; set; }
}
static class Program {
    static void Main() {
        var ser = new XmlSerializer(typeof(MyWrapper));
        var obj = new MyWrapper {
            Data = new List<ChildClass> {
                new ChildA { ChildProp = "abc", AProp = "def"},
                new ChildB { ChildProp = "ghi", BProp = "jkl"}}
        };
        ser.Serialize(Console.Out, obj);
    }
}
48
ответ дан 30 November 2019 в 02:29
поделиться

Для этого вы можете использовать XmlIncludeAttribute . Или посмотрите этот пост о другом способе сделать это.

5
ответ дан 30 November 2019 в 02:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: