温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

.NET中XML序列化和反序列化常用类和属性是什么

发布时间:2022-04-02 10:44:32 来源:亿速云 阅读:160 作者:iii 栏目:开发技术

这篇“.NET中XML序列化和反序列化常用类和属性是什么”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“.NET中XML序列化和反序列化常用类和属性是什么”文章吧。

    序列化和反序列化是指什么?

    序列化(seriallization): 将对象转化为便于传输的数据格式, 常见的序列化格式:二进制格式,字节数组,json字符串,xml字符串。
    反序列化(deseriallization):将序列化的数据恢复为对象的过程。

    XmlSerializer类

      该类用一种高度松散耦合的方式提供串行化服务。你的类不需要继承特别的基类,而且它们也不需要实现特别的接口。相反,你只需在你的类或者这些类的公共域以及读/写属性里加上自定义的特性。XmlSerializer通过反射机制读取这些特性并用它们将你的类和类成员映射到xml元素和属性(在对象和 XML 文档之间进行序列化和反序列化操作)。

    .NET-XML序列化和反序列化简单示例代码

    using System.IO;
    using System.Xml.Serialization;
     
    namespace Practices.Common
    {
        public class SimpleSerializer
        {
            /// <summary>
            /// Model实体对象序列化为XML字符串
            /// </summary>
            /// <typeparam name="T">对象类型</typeparam>
            /// <param name="t">Model实体对象</param>
            /// <returns></returns>
            public static string SerializeXMLL<T>(T t)
            {
                using (StringWriter sw = new StringWriter())
                {
                    XmlSerializer xmlSerializer = new XmlSerializer(t.GetType());
                    xmlSerializer.Serialize(sw, t);
                    return sw.ToString();
                }
            }
     
            /// <summary>
            /// XML反序列化为对象
            /// </summary>
            /// <typeparam name="T">对象类型</typeparam>
            /// <param name="xml">xml字符串</param>
            /// <returns></returns>
            public static T Deserialize<T>(string xml)
            {
                XmlSerializer xmlSerializer = new XmlSerializer(typeof(T));
                StringReader stringReader = new StringReader(xml);
                return (T)xmlSerializer.Deserialize(stringReader);
            }
     
        }
    }

    XmlTypeAttribute类

       该类主要控制当属性目标由XML序列化时生成的XML节点。

    应用示例

    /// <summary>
    /// Envelope
    /// </summary>
    [XmlType(TypeName = "envelope")]
    public class CityRes
    {
        public Header header { get; set; }
     
        public Response response { get; set; }
     
    }

    XmlElementAttribute类

       该类用于指示公共字段或属性在XML序列化或反序列化包含它们的对象时表示XML元素。

    应用示例

    /// <summary>
    /// Envelope
    /// </summary>
    public class CityRes
    {
        /// <summary>
        /// header
        /// </summary>
        [XmlElement("header")]
        public Header header { get; set; }
     
        /// <summary>
        /// response
        /// </summary>
        [XmlElement("response")]
        public Response response { get; set; }
     
    }

    XmlAttributeAttribute类

      该类指定XML序列化必须将类成员序列化为XML属性。

    应用示例

    /// <summary>
    /// Version
    /// </summary>
    public class Version
    {
        /// <summary>
        /// port
        /// </summary>
        [XmlAttribute("port")]
        public string port { get; set; }
     
        /// <summary>
        /// host
        /// </summary>
        [XmlAttribute("host")]
        public string host { get; set; }
     
        /// <summary>
        /// text
        /// </summary>
        [XmlAttribute("text")]
        public string text { get; set; }
     
    }

    XmlArrayAttribute类

      该类主要用于XML元素数组的应用(相当于就是集合的声明)。

    应用示例

    [XmlArray]
    public Item []Items
    {
       get{return items;}
       set{items = value;}
    }

    XmlTextAttribute类

      当Xml文档序列化或反序列化时使用该特性修饰的成员会作为XML文本处理。

    应用示例

    [System.Xml.Serialization.XmlTextAttribute()]
    public string[] Text
    {
        get
        {
            return this.textField;
        }
        set
        {
            this.textField = value;
        }
    }

    XmlIgnoreAttribute类

       指示该特性修饰的对象在Xml序列化时不会序列化该特性指定的元素。

    应用示例

    public class TeamGroup
    {
     
       [XmlIgnore]
       public string Comment;
     
       public string GroupName;
    }

    用来控制XML序列化的属性汇总

    通过将下表中的特性应用于类和类成员,可以控制 XmlSerializer 序列化或反序列化该类的实例的方式。 若要了解这些属性如何控制 XML 序列化,请参阅使用属性控制 XML 序列化。

    特性适用对象指定
    XmlAnyAttributeAttribute公共字段、属性、参数或返回 XmlAttribute 对象数组的返回值。反序列化时,将会使用 XmlAttribute 对象填充数组,而这些对象代表对于架构未知的所有 XML 特性。
    XmlAnyElementAttribute公共字段、属性、参数或返回 XmlElement 对象数组的返回值。反序列化时,将会使用 XmlElement 对象填充数组,而这些对象代表对于架构未知的所有 XML 元素。
    XmlArrayAttribute公共字段、属性、参数或返回复杂对象的数组的返回值。数组成员将作为 XML 数组的成员生成。
    XmlArrayItemAttribute公共字段、属性、参数或返回复杂对象的数组的返回值。可以插入数组的派生类型。 通常与 XmlArrayAttribute 一起应用。
    XmlAttributeAttribute公共字段、属性、参数或返回值。成员将作为 XML 属性进行序列化。
    XmlChoiceIdentifierAttribute公共字段、属性、参数或返回值。可以使用枚举进一步消除成员的歧义。
    XmlElementAttribute公共字段、属性、参数或返回值。字段或属性将作为 XML 元素进行序列化。
    XmlEnumAttribute作为枚举标识符的公共字段。枚举成员的元素名称。
    XmlIgnoreAttribute公共属性和公共字段。序列化包含类时,应该忽略属性或字段。
    XmlIncludeAttribute公共派生类声明,以及 Web 服务描述语言 (WSDL) 文档的公共方法的返回值。生成要在序列化时识别的架构时,应该将该类包括在内。
    XmlRootAttribute公共类声明。控制视为 XML 根元素的属性目标的 XML 序列化。 使用该属性可进一步指定命名空间和元素名称。
    XmlTextAttribute公共属性和公共字段。属性或字段应该作为 XML 文本进行序列化。
    XmlTypeAttribute公共类声明。XML 类型的名称和命名空间。

    以上就是关于“.NET中XML序列化和反序列化常用类和属性是什么”这篇文章的内容,相信大家都有了一定的了解,希望小编分享的内容对大家有帮助,若想了解更多相关的知识内容,请关注亿速云行业资讯频道。

    向AI问一下细节

    免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

    xml
    AI