如何自定义C#的XML序列化

   2024-09-30 6900
核心提示:在C#中,您可以通过使用特性(Attributes)和实现IXmlSerializable接口来自定义XML序列化方法1:使用特性(Attributes)XmlEleme

在C#中,您可以通过使用特性(Attributes)和实现IXmlSerializable接口来自定义XML序列化

方法1:使用特性(Attributes)

XmlElementAttribute:指定一个元素名称。XmlAttributeAttribute:将字段或属性序列化为XML属性。XmlIgnoreAttribute:忽略一个公共字段或属性。XmlArrayAttribute:将数组或集合序列化为XML数组。XmlArrayItemAttribute:控制数组或集合中的项目的序列化。XmlRootAttribute:指定根元素的名称。XmlTypeAttribute:指定类型的名称。XmlIncludeAttribute:指示序列化时要包括的额外类型。

示例:

using System;using System.IO;using System.Xml.Serialization;[XmlRoot("Person")]public class Person{    [XmlElement("Name")]    public string FullName { get; set; }    [XmlAttribute("Age")]    public int Age { get; set; }    [XmlIgnore]    public bool IsMale { get; set; }}class Program{    static void Main(string[] args)    {        var person = new Person { FullName = "John Doe", Age = 30, IsMale = true };        var serializer = new XmlSerializer(typeof(Person));        using (var writer = new StreamWriter("person.xml"))        {            serializer.Serialize(writer, person);        }    }}

方法2:实现IXmlSerializable接口

实现IXmlSerializable接口后,您需要提供自定义的读取和写入XML的方法。这样,您可以完全控制序列化和反序列化过程。

示例:

using System;using System.IO;using System.Xml;using System.Xml.Schema;using System.Xml.Serialization;public class Person : IXmlSerializable{    public string FullName { get; set; }    public int Age { get; set; }    public bool IsMale { get; set; }    public void WriteXml(XmlWriter writer)    {        writer.WriteStartElement("Person");        writer.WriteElementString("Name", FullName);        writer.WriteAttributeString("Age", Age.ToString());        if (IsMale)        {            writer.WriteElementString("Gender", "Male");        }        else        {            writer.WriteElementString("Gender", "Female");        }        writer.WriteEndElement();    }    public void ReadXml(XmlReader reader)    {        reader.ReadStartElement("Person");        FullName = reader.ReadElementString("Name");        Age = int.Parse(reader.GetAttribute("Age"));        var gender = reader.ReadElementString("Gender");        IsMale = gender == "Male";        reader.ReadEndElement();    }    public XmlSchema GetSchema()    {        return null;    }}class Program{    static void Main(string[] args)    {        var person = new Person { FullName = "John Doe", Age = 30, IsMale = true };        var serializer = new XmlSerializer(typeof(Person));        using (var writer = new StreamWriter("person.xml"))        {            serializer.Serialize(writer, person);        }    }}

这两种方法都可以实现自定义的XML序列化。使用特性(Attributes)的方法更简单,但如果您需要更多的控制权,请实现IXmlSerializable接口。

 
举报打赏
 
更多>同类物流大全
推荐图文
推荐物流大全
点击排行

网站首页  |  关于我们  |  联系方式 | 网站留言    |  赣ICP备2021007278号