我试图将XML文档反序列化为List 。我的目标是让List 具有一个公共静态方法,该方法从XML文档中填充自身。这是XML:<?xml version="1.0"?><root> <item> <name>Blue</name> </item> <item> <name>Red</name> </item></root>这是项目的类(BillingItem.cs):using System;using System.Xml.Serialization;namespace DeserializeExample{ [Serializable] [XmlRoot("item")] public class BillingItem { [XmlElement("name")] public string Description { get; set; } }}这是作为列表的类(BillingItems.cs):using System;using System.Collections.Generic;using System.IO;using System.Xml.Serialization;namespace DeserializeExample{ [Serializable] [XmlRoot("root")] public class BillingItems : List<BillingItem> { public static BillingItems GetBillingItems() { using (TextReader reader = new StreamReader("BillingItems.xml")) { XmlSerializer serializer = new XmlSerializer(typeof(BillingItems)); return (BillingItems)serializer.Deserialize(reader); } } }}这是控制台应用程序,其中有一个示例,说明了我希望如何获得列表(Program.cs):namespace DeserializeExample{ class Program { static void Main(string[] args) { BillingItems billingItems = BillingItems.GetBillingItems(); } }}控制台应用程序运行时,列表为空。我认为这与我使用属性的方式有关,但是我无法确定如何进行这项工作。我希望这个例子很简单,解释得很好,并且有人可以提供帮助。 最佳答案 我将封装列表-部分出于简单起见(避免在XmlSerializer构造函数中进行一些讨厌的重载),部分原因是CF上出现了一些小故障,使其不可靠。但:public class BillingItem{ [XmlElement("name")] public string Description { get; set; }}[XmlRoot("root")]public class MyResult{ [XmlElement("item")] public List<BillingItem> Items { get; set; }}(我删除了所有不必要的其他属性)然后,您只需返回MyResult(显然,更恰当地命名),它将按照您的示例进行序列化。关于c# - 如何在覆盖项目名称的同时将XML文档反序列化为List <>,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6685021/
10-11 05:55