您好,本人在做XML序列化的时候有这么一段:
public List<XMLSystemChild> GetChildren
{
get { return m_oChildren; }
set { m_oChildren = value; }
}
List中的泛型XMLSystemChild是一个基类,被好多个派生类继承,这样本人在输出XML序列化的时候遇到一个问题:
<XMLSystemChild xsi:type="XMLChild" ID="XMP_3" TagName="test5"> <Extent> <Max X="1" Y="1" Z="1" /> </Extent> <PersistentID /> <GenericAttributes Number="1" Set="test3"> <GenericAttribute Name="test2" Format="string" Value="2" /> </GenericAttributes> <XMLSystemChild xsi:type="XMLChildEx" ID="XMP_1" TagName="test"> <Extent> <Max X="1" Y="1" Z="1" /> </Extent> <PersistentID /> <GenericAttributes Number="1" Set="test3"> <GenericAttribute Name="test2" Format="string" Value="2" /> </GenericAttributes> </XMLSystemChild> </XMLSystemChild>
节点中多 有个属性xsi:type=”XMLChildEx” 说明派生类的类型。但是本人不希望这样,希望能为每个派生类制定单独的节点名称。问一下这个该怎么样做呢?
非常感谢您的解答!
解决方案
30
可以用XmlArrayItemAttribute:
using System;
using System.Collections.Generic;
using System.IO;
using System.Xml.Serialization;
class Program
{
static void Main()
{
My my = new My()
{
Name = "Minion",
Pets = new List<Pet>() { new Dog(), new Cat() }
};
XmlSerializer serializer = new XmlSerializer(typeof(My));
using (StringWriter sw = new StringWriter())
{
serializer.Serialize(sw, my);
string xml = sw.ToString();
/*
<My xmlns:xsd="...">
<Name>Minion</Name>
<Pets>
<Dog />
<Cat />
</Pets>
</My>
*/
}
}
}
public class My
{
public string Name { get; set; }
[XmlArrayItem("Dog", Type = typeof(Dog))]
[XmlArrayItem("Cat", Type = typeof(Cat))]
public List<Pet> Pets { get; set; }
}
public class Pet { }
public class Dog : Pet { }
public class Cat : Pet { }
10
linq to xml,读取成IEnumerable<XElement> 集合之后处理。