C#序列化xml,開發常用


序列化操作對於開發人員來說最熟悉不過了。

序列化分為:序列化反序列化

序列化名詞解釋:序列化是將對象狀態轉換為可保持或傳輸的格式的過程。

與序列化相對的是反序列化,它將流轉換為對象。這兩個過程結合起來,可以輕松地存儲和傳輸數據。這就是序列化的意義所在。

我們可以把對象序列化為不同的格式,比如說,Json序列化XML序列化二進制序列化SOAP序列化等,以上這些不同的格式也都是為了適應具體的業務需求。

 

最近開發工作中需要一個xml序列化操作,

大概需求就是,有一個系統B提供了一個對外數據訪問接口,B系統只接收xml的格式數據。

在這里有兩種寫法:

    1.拼湊成一個對應格式xml數據格式傳給B系統,那么這樣就有一個問題,在拼湊過程會遇到到轉義字符,那么要去解決轉義字符帶來的問題,效率上也不高,代碼看起來也很low.

    2.實現序列化操作,這樣做效率是最高的,代碼美觀,很有層次結構,維護也方便。

 

接下來就是對於xml序列化的操作,很方便,適合開發中使用,我已經做成工具類,方便調用與移植。

   1.創建一個工具文件夾Utils,創建一個類文件XmlUtils.cs

      類具體代碼:

   

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml;
using System.Xml.Serialization;

namespace Myxs.Application.port.Utils
{
    public static class XmlUtils
    {
        public static string Serialize<T>(this T obj, bool omitXmlDeclaration = false)
        {
            var sb = new StringBuilder();
            using (var xw = XmlWriter.Create(sb, new XmlWriterSettings()
            {
                OmitXmlDeclaration = omitXmlDeclaration,
                ConformanceLevel = ConformanceLevel.Auto,
                Indent = true
            }))
            {
                var xs = new XmlSerializer(obj.GetType());
                xs.Serialize(xw, obj);
            }

            return sb.ToString();
        }

    }
}

  接下來就是創建XmlModels文件夾,創建createInfoXml.cs的類,這里是設置需要序列化的xml元素

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Xml.Serialization;

namespace Myxs.Application.port.XmlModels
{
    [XmlRoot(ElementName = "apas_info")]
    public class createInfoXml
    {
        [XmlElement(ElementName = "serviceid")]
        public string Serviceid { get; set; }
        [XmlElement(ElementName = "projectname")]
        public string Projectname { get; set; }
        [XmlElement(ElementName = "applyname")]
        public string Applyname { get; set; }
        [XmlElement(ElementName = "mobile")]
        public string Mobile { get; set; }
        [XmlElement(ElementName = "phone")]
        public string Phone { get; set; }
        [XmlElement(ElementName = "address")]
        public string Address { get; set; }
        [XmlElement(ElementName = "postcode")]
        public string Postcode { get; set; }
        [XmlElement(ElementName = "email")]
        public string Email { get; set; }
        [XmlElement(ElementName = "contactman")]
        public string Contactman { get; set; }
        [XmlElement(ElementName = "legalman")]
        public string Legalman { get; set; }
        [XmlElement(ElementName = "idcard")]
        public string Idcard { get; set; }
        [XmlElement(ElementName = "create_time")]
        public string Create_time { get; set; }
        [XmlElement(ElementName = "receive_time")]
        public string Receive_time { get; set; }
    }
}

  現在萬事俱備只欠東風了。接下來就是使用工具類了,對xml進行序列化操作。

   

var model1 = new createInfoXml
                    {
                        Serviceid = entity.serviceid,
                        Projectname = entity.projectname,
                        Applyname = entity.applyname,
                        Mobile = entity.mobile,
                        Phone = entity.phone,
                        Address = entity.address,
                        Postcode = entity.postcode,
                        Email = entity.email,
                        Contactman = entity.contactman,
                        Legalman = entity.legalman,
                        Idcard = entity.idcard,
                        Create_time = entity.create_time,
                        Receive_time = entity.receive_time,
                    };

  后面是我創建的一個實體類,這個實體類可以自己創建,我就不在這里創建了。

        調用工具類中的序列化方法

var dataxml = XmlUtils.Serialize(model1, true);

  第二參數為true的原因就是我只需要xml的數據,不行了xml的頭文件,為true是為了去除xml頭文件。

最終效果圖如下:

<apas_info>
<serviceid>xx</serviceid>

<projectname>xx</projectname>

<applyname>xxx</applyname>
<mobile>xx</mobile>
.................
</apas_info>

  這就完成序列化操作了。

   

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM