.net 如何用Xml序列化LinkedList?
.NET 2 实际上,有一些方法可以用XML序列化.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 :
列表
。
如果我有一个对象具有公共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);
}
}