[英]Ways to XML serialize multiple objects in C#
XML可以序列化相同/不同類型的多個對象的不同方式有哪些?
例如,Generic List<T>
用於相同類型的對象,而ArrayList用於不同類型的對象。
另外,哪種類型的結構可以XML序列化,哪些不能序列化?
如果任何人都可以提供示例代碼或鏈接,這將很有幫助。
要通過XmlSerializer
進行序列化,您的類型必須
關於哪種構造;
List<T>
, T[]
等)可以很好地處理 您很正確, List<T>
適合序列化一組相似的對象。 如果要處理子類,則可以使用[XmlInclude]
來區分類型。 即如果您有:
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
實現。
我也不建議序列化任意對象類型的列表。 如果您有一組有限的已知類型,則可以使用[XmlInclude]
等技巧來實現。
您可以使所有類都實現System.Xml.Serialization.IXmlSerializable。 然后,您可以擁有這種類型的通用集合。 這樣,實現所需的ReadXml和WriteXml方法非常簡單。
例如
class MyClass : IXmlSerializable
{
public System.Xml.Schema.XmlSchema GetSchema()
{
}
public void ReadXml(System.Xml.XmlReader reader)
{
//TODO: read logic here...
}
public void WriteXml(System.Xml.XmlWriter writer)
{
//TODO: write logic here...
}
}
用法...
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();
}
}
}
這是集合的Xml序列化的鏈接。 但是克里斯·阿諾德(Chris Arnold)正確地實現IXmlSerializable
將使您可以完全控制序列化。 Xml屬性之所以具有吸引力是因為它們是聲明性的,但是另一個選擇值得學習(根據我的經驗,它更快)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.