Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
.net 如何用Xml序列化LinkedList?_.net_.net 2.0_Xml Serialization - Fatal编程技术网

.net 如何用Xml序列化LinkedList?

.net 如何用Xml序列化LinkedList?,.net,.net-2.0,xml-serialization,.net,.net 2.0,Xml Serialization,.NET 2 实际上,有一些方法可以用XML序列化列表。 如果我有一个对象具有公共LinkedList成员,该怎么办 无需从LinkedList创建公共副本作为列表。也许是一种控制Xml序列化的方法,比如二进制(onserialization,onserialization) 无法用公共LinkedList成员对对象进行XML序列化? 编辑: 使用IXmlSerializable修复的测试示例 using System.Xml.Serialization; public class Foo :

.NET 2

实际上,有一些方法可以用XML序列化
列表
。 如果我有一个对象具有公共
LinkedList
成员,该怎么办

无需从
LinkedList
创建公共副本作为
列表
。也许是一种控制Xml序列化的方法,比如二进制(onserialization,onserialization)

无法用公共
LinkedList
成员对对象进行XML序列化?

编辑:

使用IXmlSerializable修复的测试示例

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 
    }
}
使用System.Xml.Serialization;
公共类Foo:IXmlSerializable{
私人内部Id;
私有字符串\u名称;
公共字符串名{
获取{return\u Name;}
设置{u Name=value;}
    }        
    
私人互联网;
公共字符串时代{
获取{return\u Age;}
设置{u Age=value;}
    }
    
私有LinkedList_LinkedList=新LinkedList();
[XmlArray()]
公共列表MyLinkedList{
获取{return\u linkedList;}
设置{u linkedList=value;}
    }
    
public System.Xml.Schema.XmlSchema GetSchema(){
返回null;
    }
    
public void ReadXml(System.Xml.XmlReader){
_Name=reader.ReadString();/?'
_Age=reader.ReadString();/?'
//foreach MyLinkedList
    }
    
public void WriteXml(System.Xml.XmlWriter){
writer.WriteString(_Name);/?'
writer.WriteString(_Age);/?'
//foreach MyLinkedList
    }
}
如果不从
LinkedList
实现或创建一个公共副本作为
列表
,这是不可能的。能够做到这一点,但不幸的是,它在.NET 2.0中不可用


更新:

下面是一个实现序列化
LinkedList
的示例:

公共类Foo:IXmlSerializable
{
公共链接列表{get;set;}
公共XmlSchema GetSchema()
{
返回null;
}
公共void ReadXml(XmlReader)
{
抛出新系统。NotImplementedException();
}
public void WriteXml(XmlWriter)
{
writer.writeStart元素(“列表”);
foreach(列表中的变量项)
{
writer.WriteElementString(“Item”,Item.ToString());
}
writer.writeedelement();
}
}
班级计划
{
静态void Main(字符串[]参数)
{
var foo=新foo
{
List=newlinkedlist(new[]{1,2,3})
};
var serializer=新的XmlSerializer(foo.GetType());
serializer.Serialize(Console.Out,foo);
}
}

正如您所看到的,它基本上是手工进行序列化,因此这里的
XmlSerializer
没有多少好处。

关于IXmlSerializable的有趣之处。。。一个如何序列化LinkedList的示例?谢谢,这很有趣。现在,再精确一点。如果LinkedList中的T是一个自定义对象(假设它是
Bar
),该怎么办。Bar还可以是XmlSerializable、自定义XmlSerializable或根本不可序列化。的可能重复项
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);
    }
}