C# 在C中用XML序列化多个对象的方法#
XML序列化相同/不同类型的多个对象的不同方式有哪些 例如,相同类型对象的通用C# 在C中用XML序列化多个对象的方法#,c#,xml-serialization,C#,Xml Serialization,XML序列化相同/不同类型的多个对象的不同方式有哪些 例如,相同类型对象的通用列表 和不同类型对象的ArrayList 另外,哪些类型的结构是XML可序列化的,哪些不是 如果任何人都能提供示例代码或链接,这将非常有用。您可以让所有类实现System.Xml.Serialization.IXmlSerializable。然后,您可以拥有这种类型的泛型集合。实现所需的ReadXml和WriteXml方法非常简单 e、 g 用法 class WorkerClass { public void Se
列表
和不同类型对象的ArrayList
另外,哪些类型的结构是XML可序列化的,哪些不是
如果任何人都能提供示例代码或链接,这将非常有用。您可以让所有类实现System.Xml.Serialization.IXmlSerializable。然后,您可以拥有这种类型的泛型集合。实现所需的ReadXml和WriteXml方法非常简单 e、 g 用法
class WorkerClass
{
public void SerializeListToFile(IList<IXmlSerializable> list, string fileName)
{
using (XmlWriter writer = new XmlTextWriter(fileName))
{
foreach (IXmlSerializable item in list)
item.WriteXml(writer);
writer.Close();
}
}
}
class-worker类
{
public void serializeListFile(IList列表,字符串文件名)
{
使用(XmlWriter=新的XmlTextWriter(文件名))
{
foreach(列表中的IXmlSerializable项)
item.WriteXml(编写器);
writer.Close();
}
}
}
这里是一个链接。但是Chris Arnold是对的,实现IXmlSerializable
将允许您完全控制序列化。Xml属性之所以吸引人,是因为它们是声明性的,但另一个选项值得学习(根据我的经验,速度更快)。要通过XmlSerializer
序列化,您的类型必须
- 公开
- 有一个公共的无参数构造函数
- 它序列化公共读/写字段和属性(首选属性)
- 单个混凝土实体是好的
- 具体的列表/数组(
,List
等)处理得很好T[]
- 但它将与接口、字典和各种泛型场景(列表除外)斗争
List
可以序列化一组相似的对象。如果您处理的是子类,那么可以使用[xmlclude]
来区分类型;i、 e.如果您有:
var list = new List<ParentType>();
list.Add(new ParentType());
list.Add(new ChildType()); // Child : Parent
[XmlInclude(typeof(Child))]
public class Parent {}
public class Child : Parent {}
(您也可以在ctor中指定此关系到XmlSerializer
,但这是额外的工作)
我不建议使用IXmlSerializable
,除非您必须这样做;这很复杂,很难正确处理。更重要的是,;如果您在SOAP服务上使用wsdl生成的代理对象,它根本不起作用**;另一端将没有您的IXmlSerializable
实现
我也不建议序列化任意对象类型的列表;如果您有一组有限的已知类型,那么可以使用
[xmlclude]
等技巧来实现这一点。无参数构造函数不必是公共的。
[XmlInclude(typeof(Child))]
public class Parent {}
public class Child : Parent {}