最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C#復(fù)雜XML反序列化為實(shí)體對(duì)象兩種方式小結(jié)

 更新時(shí)間:2022年04月02日 08:52:29   作者:追逐時(shí)光者  
本文主要介紹了C#復(fù)雜XML反序列化為實(shí)體對(duì)象兩種方式,主要介紹如何把通過接口獲取到的Xml數(shù)據(jù)轉(zhuǎn)換成(反序列化)我們想要的實(shí)體對(duì)象,感興趣的可以一起來了解一下

前言

今天主要講的是如何把通過接口獲取到的Xml數(shù)據(jù)轉(zhuǎn)換成(反序列化)我們想要的實(shí)體對(duì)象,當(dāng)然Xml反序列化和Json反序列化的方式基本上都是大同小異。都是我們事先定義好對(duì)應(yīng)的對(duì)應(yīng)的Xml實(shí)體模型,不過Xml是通過XmlSerializer類的相關(guān)特性來對(duì)實(shí)體對(duì)象和 XML文檔之間進(jìn)行序列化和反序列化操作的。序列化和反序列化其實(shí)都還好,我們可以調(diào)用封裝好的XmlHelper幫助類即可實(shí)現(xiàn),最關(guān)鍵的是我們?cè)撊绾稳ザx這些實(shí)體模型(Model)。當(dāng)你遇到對(duì)方接口一下子返回一大串的Xml數(shù)據(jù)并且里面存在很多不同的Xml節(jié)點(diǎn),你該怎么辦一個(gè)一個(gè)去解析這些節(jié)點(diǎn)到模型上去嗎?本文我主要講兩種方式,第一種方法是通過手寫的方式去定義Xml的實(shí)體對(duì)象模型類,第二種方法是通過Visual Studio自帶的生成Xml實(shí)體對(duì)象模型類。

需要操作的Xml數(shù)據(jù)

注意:以下是我稍微簡(jiǎn)化的Xml數(shù)據(jù),實(shí)際數(shù)據(jù)可能比這里要復(fù)雜個(gè)大幾倍。

<?xml version="1.0" encoding="utf-8" ?>
<envelope>
    <header>
        <version port="1111" host="www.baidu.com">successfuly</version>
        <timestamp>20211216081218</timestamp>
    </header>
    <response type="cities" product="hotel">
        <cities>
            <city>
                <code value="zg" />
                <city_tax value="true" />
                <names>
                    <name language="fr" value="ABANO TERME - PADOUE" />
                    <name language="en" value="ABANO TERME - PADUE" />
                    <name language="nl" value="ABANO TERME - PADUE" />
                </names>
            </city>
            <city>
                <code value="hk" />
                <city_tax value="false" />
                <names>
                    <name language="fr" value="ABBADIA SAN SALVATORE - SIENNE" />
                    <name language="en" value="ABBADIA SAN SALVATORE - SIENA" />
                    <name language="nl" value="ABBADIA SAN SALVATORE - SIENA" />
                </names>
            </city>
        </cities>
    </response>
</envelope>

一、通過是手寫的方式去定義Xml的實(shí)體對(duì)象模型類

當(dāng)然假如你有耐心、時(shí)間充足并且眼睛好的話可以使用這種手寫的方式去定義,很多情況寫到最好都會(huì)把自己給寫糊涂了(可能是我年紀(jì)大了的原因)。

namespace Practices.Models
{
    /// <summary>
    /// Envelope
    /// </summary>
    [XmlType(TypeName = "envelope")]
    public class CityDataModel
    {
        /// <summary>
        /// header
        /// </summary>
        [XmlElement("header")]
        public Header header { get; set; }

        /// <summary>
        /// response
        /// </summary>
        [XmlElement("response")]
        public Response response { get; set; }

    }

    /// <summary>
    /// Header
    /// </summary>
    [XmlType(TypeName = "header")]
    public class Header
    {
        /// <summary>
        /// version
        /// </summary>
        [XmlElement("version")]
        public Version version { get; set; }

        /// <summary>
        /// timestamp
        /// </summary>
        [XmlElement("timestamp")]
        public string timestamp { get; set; }
    }

    /// <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>
        /// value:XmlTextAttribute指示該屬性作為XML文本處理
        /// </summary>
        [XmlTextAttribute()]
        public string value { get; set; }

    }

    /// <summary>
    /// Response
    /// </summary>
    [XmlType(TypeName = "response")]
    public class Response
    {
        /// <summary>
        /// type
        /// </summary>
        [XmlAttribute]
        public string type { get; set; }

        /// <summary>
        /// product
        /// </summary>
        [XmlAttribute]
        public string product { get; set; }

        /// <summary>
        /// cities
        /// </summary>
        [XmlArray("cities")]
        public List<City> cities { get; set; }

    }

    /// <summary>
    /// class: City
    /// </summary>
    [XmlType(TypeName = "city")]
    public class City
    {
        /// <summary>
        /// code
        /// </summary>
        [XmlElement("code")]
        public Code code { get; set; }

        /// <summary>
        /// city_tax
        /// </summary>
        [XmlElement("city_tax")]
        public City_tax city_tax { get; set; }

        /// <summary>
        /// names
        /// </summary>
        [XmlArray("names")]
        public List<Name> names { get; set; }
    }

    /// <summary>
    /// class: Code
    /// </summary>
    [XmlType(TypeName = "code")]
    public class Code
    {
        /// <summary>
        /// 
        /// </summary>
        [XmlAttribute("value")]
        public string value { get; set; }

    }


    /// <summary>
    /// class: City_tax
    /// </summary>
    [XmlType(TypeName = "city_tax")]
    public class City_tax
    {
        /// <summary>
        /// 
        /// </summary>
        [XmlAttribute("value")]
        public string value { get; set; }

    }

    /// <summary>
    /// class: Name
    /// </summary>
    [XmlType(TypeName = "name")]
    public class Name
    {
        /// <summary>
        /// 
        /// </summary>
        [XmlAttribute("language")]
        public string language { get; set; }

        /// <summary>
        /// 
        /// </summary>
        [XmlAttribute("value")]
        public string value { get; set; }

    }
}

二、通過Visual Studio自帶的生成Xml實(shí)體對(duì)象模型類

Vs被稱為宇宙最強(qiáng)IDE也不是沒有理由的,它集成了很多自動(dòng)創(chuàng)建功能,如自動(dòng)生成Json類、Xml類等,雖然說使用Vs自動(dòng)生成的Xml模型可讀性有點(diǎn)差并且有些冗余,但是快捷省事,只需要略微改動(dòng)一下即可使用。

1、首先Ctrl+C復(fù)制你需要生成的Xml文檔內(nèi)容

2、找到編輯=》選擇性粘貼=》將Xml粘貼為類

3、以下是使用VS自動(dòng)生成的Xml類

namespace Practices.Models
{

    // 注意: 生成的代碼可能至少需要 .NET Framework 4.5 或 .NET Core/Standard 2.0。
    /// <remarks/>
    [System.SerializableAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    //TODO:注意這里因?yàn)槲野杨惷某闪宋易远x的,所以在TypeName這里需要聲明Xml文檔的節(jié)點(diǎn)名
    [System.Xml.Serialization.XmlTypeAttribute(typeName: "envelope")]
    [System.Xml.Serialization.XmlRootAttribute(Namespace = "", IsNullable = false)]
    public partial class NewCityDataModel
    {

        private envelopeHeader headerField;

        private envelopeResponse responseField;

        /// <remarks/>
        public envelopeHeader header
        {
            get
            {
                return this.headerField;
            }
            set
            {
                this.headerField = value;
            }
        }

        /// <remarks/>
        public envelopeResponse response
        {
            get
            {
                return this.responseField;
            }
            set
            {
                this.responseField = value;
            }
        }
    }

    /// <remarks/>
    [System.SerializableAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
    public partial class envelopeHeader
    {

        private envelopeHeaderVersion versionField;

        private ulong timestampField;

        /// <remarks/>
        public envelopeHeaderVersion version
        {
            get
            {
                return this.versionField;
            }
            set
            {
                this.versionField = value;
            }
        }

        /// <remarks/>
        public ulong timestamp
        {
            get
            {
                return this.timestampField;
            }
            set
            {
                this.timestampField = value;
            }
        }
    }

    /// <remarks/>
    [System.SerializableAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
    public partial class envelopeHeaderVersion
    {

        private ushort portField;

        private string hostField;

        private string valueField;

        /// <remarks/>
        [System.Xml.Serialization.XmlAttributeAttribute()]
        public ushort port
        {
            get
            {
                return this.portField;
            }
            set
            {
                this.portField = value;
            }
        }

        /// <remarks/>
        [System.Xml.Serialization.XmlAttributeAttribute()]
        public string host
        {
            get
            {
                return this.hostField;
            }
            set
            {
                this.hostField = value;
            }
        }

        /// <remarks/>
        [System.Xml.Serialization.XmlTextAttribute()]
        public string Value
        {
            get
            {
                return this.valueField;
            }
            set
            {
                this.valueField = value;
            }
        }
    }

    /// <remarks/>
    [System.SerializableAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
    public partial class envelopeResponse
    {

        private envelopeResponseCity[] citiesField;

        private string typeField;

        private string productField;

        /// <remarks/>
        [System.Xml.Serialization.XmlArrayItemAttribute("city", IsNullable = false)]
        public envelopeResponseCity[] cities
        {
            get
            {
                return this.citiesField;
            }
            set
            {
                this.citiesField = value;
            }
        }

        /// <remarks/>
        [System.Xml.Serialization.XmlAttributeAttribute()]
        public string type
        {
            get
            {
                return this.typeField;
            }
            set
            {
                this.typeField = value;
            }
        }

        /// <remarks/>
        [System.Xml.Serialization.XmlAttributeAttribute()]
        public string product
        {
            get
            {
                return this.productField;
            }
            set
            {
                this.productField = value;
            }
        }
    }

    /// <remarks/>
    [System.SerializableAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
    public partial class envelopeResponseCity
    {

        private envelopeResponseCityCode codeField;

        private envelopeResponseCityCity_tax city_taxField;

        private envelopeResponseCityName[] namesField;

        /// <remarks/>
        public envelopeResponseCityCode code
        {
            get
            {
                return this.codeField;
            }
            set
            {
                this.codeField = value;
            }
        }

        /// <remarks/>
        public envelopeResponseCityCity_tax city_tax
        {
            get
            {
                return this.city_taxField;
            }
            set
            {
                this.city_taxField = value;
            }
        }

        /// <remarks/>
        [System.Xml.Serialization.XmlArrayItemAttribute("name", IsNullable = false)]
        public envelopeResponseCityName[] names
        {
            get
            {
                return this.namesField;
            }
            set
            {
                this.namesField = value;
            }
        }
    }

    /// <remarks/>
    [System.SerializableAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
    public partial class envelopeResponseCityCode
    {

        private string valueField;

        /// <remarks/>
        [System.Xml.Serialization.XmlAttributeAttribute()]
        public string value
        {
            get
            {
                return this.valueField;
            }
            set
            {
                this.valueField = value;
            }
        }
    }

    /// <remarks/>
    [System.SerializableAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
    public partial class envelopeResponseCityCity_tax
    {

        private bool valueField;

        /// <remarks/>
        [System.Xml.Serialization.XmlAttributeAttribute()]
        public bool value
        {
            get
            {
                return this.valueField;
            }
            set
            {
                this.valueField = value;
            }
        }
    }

    /// <remarks/>
    [System.SerializableAttribute()]
    [System.ComponentModel.DesignerCategoryAttribute("code")]
    [System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)]
    public partial class envelopeResponseCityName
    {

        private string languageField;

        private string valueField;

        /// <remarks/>
        [System.Xml.Serialization.XmlAttributeAttribute()]
        public string language
        {
            get
            {
                return this.languageField;
            }
            set
            {
                this.languageField = value;
            }
        }

        /// <remarks/>
        [System.Xml.Serialization.XmlAttributeAttribute()]
        public string value
        {
            get
            {
                return this.valueField;
            }
            set
            {
                this.valueField = value;
            }
        }
    }



}

驗(yàn)證兩個(gè)Xml類是否能夠反序列化成功

/// <summary>     
        /// 讀取Xml文件內(nèi)容反序列化為指定的對(duì)象  
        /// </summary>    
        /// <param name="filePath">Xml文件的位置(絕對(duì)路徑)</param>  
        /// <returns></returns>    
        public static T DeserializeFromXml<T>(string filePath)
        {
            try
            {
                if (!File.Exists(filePath))
                    throw new ArgumentNullException(filePath + " not Exists");
                using (StreamReader reader = new StreamReader(filePath))
                {
                    XmlSerializer xs = new XmlSerializer(typeof(T));
                    T ret = (T)xs.Deserialize(reader);
                    return ret;
                }
            }
            catch (Exception ex)
            {
                return default(T);
            }
        }

C# XML基礎(chǔ)入門(XML文件內(nèi)容增刪改查清)

http://m.fzitv.net/article/243168.htm

C#XmlHelper幫助類操作Xml文檔的通用方法匯總

http://m.fzitv.net/article/242389.htm

.NET中XML序列化和反序列化常用類和用來控制XML序列化的屬性總結(jié)

http://m.fzitv.net/article/243165.htm

到此這篇關(guān)于C#復(fù)雜XML反序列化為實(shí)體對(duì)象兩種方式小結(jié)的文章就介紹到這了,更多相關(guān)C#復(fù)雜XML反序列化為實(shí)體對(duì)象 內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C#多線程ThreadPool線程池詳解

    C#多線程ThreadPool線程池詳解

    這篇文章主要為大家詳細(xì)介紹了C#多線程ThreadPool線程池的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-07-07
  • c#自帶緩存使用方法 c#移除清理緩存

    c#自帶緩存使用方法 c#移除清理緩存

    這篇文章主要介紹了c#自帶緩存使用方法,包括獲取數(shù)據(jù)緩存、設(shè)置數(shù)據(jù)緩存、移除指定數(shù)據(jù)緩存等方法,需要的朋友可以參考下
    2014-02-02
  • Unity中的RegisterPlugins實(shí)用案例深入解析

    Unity中的RegisterPlugins實(shí)用案例深入解析

    這篇文章主要為大家介紹了Unity中的RegisterPlugins實(shí)用案例深入解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-05-05
  • C#?獲取本機(jī)IP地址(IPv4和IPv6)

    C#?獲取本機(jī)IP地址(IPv4和IPv6)

    本文主要介紹了C#?獲取本機(jī)IP地址(IPv4和IPv6),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-08-08
  • c# 快速排序算法

    c# 快速排序算法

    快速排序使用分治法(Divide and conquer)策略來把一個(gè)串行(list)分為兩個(gè)子串行(sub-lists)
    2013-10-10
  • C#實(shí)現(xiàn)餐飲管理系統(tǒng)完整版

    C#實(shí)現(xiàn)餐飲管理系統(tǒng)完整版

    這篇文章主要為大家詳細(xì)介紹了C#實(shí)現(xiàn)餐飲管理系統(tǒng)的完整版,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2019-01-01
  • Unity實(shí)現(xiàn)桌面反彈的示例代碼

    Unity實(shí)現(xiàn)桌面反彈的示例代碼

    反彈球是小時(shí)候都玩過的網(wǎng)頁小游戲,但是很多人都不知道怎樣實(shí)現(xiàn),本文就來介紹一下Unity實(shí)現(xiàn)桌面反彈的示例代碼,感興趣的可以了解一下
    2021-05-05
  • C#中的尾遞歸與Continuation詳解

    C#中的尾遞歸與Continuation詳解

    這篇文章主要介紹了C#中的尾遞歸與Continuation詳解,本文講解了遞歸與尾遞歸、尾遞歸與Continuation、Continuation的改進(jìn)等內(nèi)容,需要的朋友可以參考下
    2015-06-06
  • C#發(fā)送和接收HTTP請(qǐng)求類HttpWebRequest的用法

    C#發(fā)送和接收HTTP請(qǐng)求類HttpWebRequest的用法

    這篇文章主要給大家介紹了關(guān)于C#發(fā)送和接收HTTP請(qǐng)求類HttpWebRequest用法的相關(guān)資料,C#中的HttpWebRequest是一個(gè)用于發(fā)送HTTP請(qǐng)求的類,它可以用于向Web服務(wù)器發(fā)送GET、POST、PUT、DELETE等請(qǐng)求,需要的朋友可以參考下
    2024-06-06
  • C#實(shí)現(xiàn)簡(jiǎn)單的字符串加密

    C#實(shí)現(xiàn)簡(jiǎn)單的字符串加密

    這篇文章介紹了C#實(shí)現(xiàn)字符串加密的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-06-06

最新評(píng)論

什邡市| 红原县| 长乐市| 文昌市| 宜城市| 高清| 灵石县| 辽宁省| 巴林左旗| 阿勒泰市| 阜康市| 福海县| 封丘县| 广元市| 海丰县| 永靖县| 卢龙县| 桑日县| 灌阳县| 安吉县| 佛山市| 长寿区| 运城市| 洛浦县| 青海省| 芜湖县| 自贡市| 中卫市| 卢湾区| 凤山市| 民勤县| 临汾市| 城固县| 河西区| 赤峰市| 芦山县| 旺苍县| 淮阳县| 楚雄市| 苏尼特左旗| 临武县|