加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

XML反序列化-- 多个相同元素(每个元素包含多节点)

发布时间:2020-12-16 06:07:12 所属栏目:百科 来源:网络整理
导读:XML格式: Root CustomerInfo Parameters Parameter ParaName="Customer Name" ControlType="TextBox" ParaValue="" Required="1" AffectPara=""/Parameter Parameter ParaName="Region" ControlType="DropdownList" ParaValue="Asia,Europe,Other" Required

XML格式:

<Root>
  <CustomerInfo>
    <Parameters>
      <Parameter ParaName="Customer Name" ControlType="TextBox" ParaValue="" Required="1" AffectPara=""></Parameter>
      <Parameter ParaName="Region" ControlType="DropdownList" ParaValue="Asia,Europe,Other" Required="1" AffectPara="Country"></Parameter>
      <Parameter ParaName="Country" ControlType="DropdownList" ParaValue="" Required="1" AffectPara=""></Parameter>
      <Parameter ParaName="Shipping address" ControlType="TextBox" ParaValue="" Required="1" AffectPara=""></Parameter>
      <Parameter ParaName="Attention To" ControlType="TextBox" ParaValue="" Required="1" AffectPara=""></Parameter>
      <Parameter ParaName="Project / Evaluation" ControlType="TextBox" ParaValue="" Required="1" AffectPara=""></Parameter>
      <Parameter ParaName="Quantity" ControlType="DropdownList" ParaValue="5,10,15,20" Required="1" AffectPara=""></Parameter>
      <Parameter ParaName="Other information" ControlType="TextBox" ParaValue="" Required="0" AffectPara=""></Parameter>
    </Parameters>
  </CustomerInfo>
</Root>

关于XML序列化/反序列化的工具类:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Data;
using System.Xml;
using System.Xml.Serialization;

/// <summary>
/// Xml序列化与反序列化
/// </summary>
public class XmlUtility
{
    #region 反序列化
    /// <summary>
    /// 反序列化
    /// </summary>
    /// <param name="type">类型</param>
    /// <param name="xml">XML字符串</param>
    /// <returns></returns>
    public static object Deserialize(Type type,string xml)
    {
        try
        {
            using (StringReader sr = new StringReader(xml))
            {
                XmlSerializer xmldes = new XmlSerializer(type);
                return xmldes.Deserialize(sr);
            }
        }
        catch (Exception e)
        {
            return null;
        }
    }
    /// <summary>
    /// 反序列化
    /// </summary>
    /// <param name="type"></param>
    /// <param name="xml"></param>
    /// <returns></returns>
    public static object Deserialize(Type type,Stream stream)
    {
        XmlSerializer xmldes = new XmlSerializer(type);
        return xmldes.Deserialize(stream);
    }
    #endregion

    #region 序列化
    /// <summary>
    /// 序列化
    /// </summary>
    /// <param name="type">类型</param>
    /// <param name="obj">对象</param>
    /// <returns></returns>
    public static string Serializer(Type type,object obj)
    {
        MemoryStream Stream = new MemoryStream();
        XmlSerializer xml = new XmlSerializer(type);
        try
        {
            //序列化对象
            xml.Serialize(Stream,obj);
        }
        catch (InvalidOperationException)
        {
            throw;
        }
        Stream.Position = 0;
        StreamReader sr = new StreamReader(Stream);
        string str = sr.ReadToEnd();

        sr.Dispose();
        Stream.Dispose();

        return str;
    }

    #endregion
}

实体类:

    public class Root
    {
        private CustomerInfo _customerInfo;
        [XmlElement("CustomerInfo")]
        public CustomerInfo CustomerInfo
        {
            get { return _customerInfo; }
            set { _customerInfo = value; }
        }
    }
    public class CustomerInfo
    {
        private Parameters _parameters;
        [XmlElement("Parameters")]
        public Parameters Parameters
        {
            get { return _parameters; }
            set { _parameters = value; }
        }
    }
    public class Parameters
    {
        private Parameter[] _parameter;
        [XmlElement("Parameter")]
        public Parameter[] Parameter
        {
            get { return _parameter; }
            set { _parameter = value; }
        }
    }
    public class Parameter
    {
        private string _paraName;
        [XmlAttribute("ParaName")]
        public string ParaName
        {
            get { return _paraName; }
            set { _paraName = value; }
        }
        private string _controlType;
        [XmlAttribute("ControlType")]
        public string ControlType
        {
            get { return _controlType; }
            set { _controlType = value; }
        }
        private string _paraValue;
        [XmlAttribute("ParaValue")]
        public string ParaValue
        {
            get { return _paraValue; }
            set { _paraValue = value; }
        }
        private string _required;
        [XmlAttribute("Required")]
        public string Required
        {
            get { return _required; }
            set { _required = value; }
        }
        private string _affectPara;
        [XmlAttribute("AffectPara")]
        public string AffectPara
        {
            get { return _affectPara; }
            set { _affectPara = value; }
        }
    }

调用反序列化方法得到Parameter的数组集合:
string path = System.AppDomain.CurrentDomain.BaseDirectory;
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.Load("../test.xml");
Root root = XmlUtility.Deserialize(typeof(Root),xmlDoc.OuterXml) as Root;
Parameter[] Parameter = root.CustomerInfo.Parameters.Parameter;


调用序列化方法得到XML:

string xml = XmlUtility.Serializer(typeof(Root),root);
Console.WriteLine(xml);
Console.ReadKey();

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读