代码之家  ›  专栏  ›  技术社区  ›  serhio

如何对LinkedList进行XML序列化?

  •  0
  • serhio  · 技术社区  · 16 年前

    .NET 2

    实际上,有一些方法可以XML序列化 List<T> . 如果我有一个公共物品 LinkedList<T> 成员?

    不创建公共副本 列表& T; 链接列表 . 也许是一种像二进制(OnSerializing,OnDeserializing)那样控制XML序列化的方法。

    将无法对具有公共的对象进行XML序列化 链接列表 成员?

    编辑:

    用IXML可序列化修复的测试示例

    using System.Xml.Serialization;
    
    public class Foo : IXmlSerializable {        
        private int _Id;
        private string _Name;
    
        public string Name {
            get { return _Name; }
            set { _Name = value; }
        }        
        
        private int _Age;
        public string Age {
            get { return _Age; }
            set { _Age = value; }
        }
        
        private LinkedList<Bar> _linkedList = new LinkedList<Bar>();
        [XmlArray()]
        public List<Bar> MyLinkedList {
            get { return _linkedList; }
            set { _linkedList = value; }
        }
        
        public System.Xml.Schema.XmlSchema GetSchema() {
            return null;
        }
        
        public void ReadXml(System.Xml.XmlReader reader) {
            _Name = reader.ReadString(); // ? '            
            _Age = reader.ReadString(); // ? '
            // foreach MyLinkedList 
        }
        
        public void WriteXml(System.Xml.XmlWriter writer) {
            writer.WriteString(_Name); // ? '
            writer.WriteString(_Age); // ? '
            // foreach MyLinkedList 
        }
    }
    
    1 回复  |  直到 16 年前
        1
  •  2
  •   Darin Dimitrov    16 年前

    XmlSerializer IXmlSerializable List<T> LinkedList<T> DataContractSerializer


    public class Foo : IXmlSerializable
    {
        public LinkedList<int> List { get; set; }
    
        public XmlSchema GetSchema()
        {
            return null;
        }
    
        public void ReadXml(XmlReader reader)
        {
            throw new System.NotImplementedException();
        }
    
        public void WriteXml(XmlWriter writer)
        {
            writer.WriteStartElement("List");
            foreach (var item in List)
            {
                writer.WriteElementString("Item", item.ToString());    
            }
            writer.WriteEndElement();
        }
    }
    
    class Program
    {
        static void Main(string[] args)
        {
            var foo = new Foo
            {
                List = new LinkedList<int>(new[] { 1, 2, 3 })
            };
            var serializer = new XmlSerializer(foo.GetType());
            serializer.Serialize(Console.Out, foo);
        }
    }
    

    XmlSerializer

    推荐文章