经常见XML序列化的文章,对该序列化方式并不是太晓得,看了MSDN和一些资料后有了大致的了解,大道理讲不出来,上 代码先:
方式一 通过XmlSerialize直接序列化:
Class BeSerialized
{
//某字段
public int someFiled;
//公共类的一个可序列化的属性
private bool serialme;
public bool SerialMe
{
get { return serialme; }
set { serialme = value; }
}
}
class process
{
public void Main()
{
SerialIt();
DeSerialIt();
}
SerialIt()
{
BeSerialized bs=new BeSerialized();
bs.someFiled=;
bs.SerialMe=;
XmlSerialize xs=new XmlSerialize(typeof(BeSerialized));
StreamWriter sw=
xs.Serialze(sw,bs);
}
DeSerialIt()
{
XmlSerialze xs=new XmlSerialize(typeof(BeSerialized));
StreamReader sr
BeSerialized bs=(BeSerialized)xs.DeSerialize(sr);
}
}
方式二 手动在要序列化的类设置属性类型
public class Student
{
private int id;
[xmlAttribute]
public int ID //序列化时作为Student节点的属性而不是默认的子节点
{
get { return id; }
set { id = value; }
}
private string name;
[XmlElement("sname")]
public string Name //节点名称为sname而不是默认的Name
{
get { return name; }
set { name = value; }
}
private int age;
[XmlIgnore]
public int Age //忽略该属性,不存入XML文件
{
get { return age; }
set { age = value; }
}
internal int score = 88;
public override string ToString()
{
return "id:" + id + " name:" + name + " age:" + age + " score:" + score;
}
}
还有很多,诸如XmlAttribute,XmlArray之类的标签,这样做的好处是可以控制生成xml文档的元素组成结构,
方式三----继承IXmlSerialize接口
public class YouCanSerializeMe1:IXmlSerializable
{
public YouCanSerializeMe1()
{
}
private int pro1;
public int Pro1
{
get { return pro1; }
set { pro1 = value; }
}
private string pro2;
public string Pro2
{
get { return pro2; }
set { pro2 = value; }
}
#region IXmlSerializable 成员
public System.Xml.Schema.XmlSchema GetSchema()
{
return (null);
}
public void ReadXml(System.Xml.XmlReader reader)
{
reader.Read();
reader.ReadStartElement();
}
public void WriteXml(System.Xml.XmlWriter writer)
{
writer.WriteStartElement("aaaa");
writer.WriteStartAttribute("bbbb");
writer.WriteEndAttribute();
writer.WriteValue("ccc");
writer.WriteEndElement();
}
#endregion
}
YouCanSerializeMe1 y1 = new YouCanSerializeMe1();
XmlSerializer xmls = new XmlSerializer(typeof(YouCanSerializeMe1));
StreamWriter sw = new StreamWriter(Application.StartupPath + "//button4.xml");
xmls.Serialize(sw, y1);
通过以上三种方式我们不难发现,最简单的第一种例子,直接将对象通过XmlSerialize序列化,不考虑序列化后的文档结构,直接序列化对象,
第二种例子,直接在要序列化的类中添加标签,这样生成的Xml格式就可以在序列化前就控制一下
第三种例子,要序列化的类继承IXmlSerialize接口,继承了改接口后,在ReadXml和WriteXml方法里添加控制Xml文档的代码