從多個方面詳解對象轉XML

一、對象轉XML字符串

using System.Xml.Serialization;
using System.IO;

public static string ObjectToXml(T obj)
{
    var serializer = new XmlSerializer(typeof(T));
    using (var stream = new StringWriter())
    {
        serializer.Serialize(stream, obj);
        return stream.ToString();
    }
}

以上代碼中,我們使用了XmlSerializer將對象序列化為XML字符串。首先,我們需要通過new XmlSerializer(typeof(T))獲取一個XmlSerializer實例。這個類需要傳入一個類型參數,即需要被序列化的對象的類型。然後,我們將對象序列化成stream對象,並使用ToString()方法將stream對象轉換為字符串並返回。

二、對象轉JSON字符串

using System.Web.Script.Serialization;

public static string ObjectToJson(T obj)
{
    var serializer = new JavaScriptSerializer();
    return serializer.Serialize(obj);
}

以上代碼使用了JavaScriptSerializer將對象序列化為JSON字符串。與XmlSerializer類似,我們需要使用new JavaScriptSerializer()獲取一個JavaScriptSerializer實例,然後使用Serialize()方法將對象序列化成字符串並返回。

三、對象轉XML的設計模式

對象轉XML的設計模式主要有兩種:基於屬性的序列化和基於元素的序列化。

基於屬性的序列化指的是,將對象的屬性作為XML的屬性,對象的屬性值作為XML屬性的值進行序列化,如下所示:

public class Person
{
    [XmlAttribute]
    public string Name { get; set; }
    [XmlAttribute]
    public int Age { get; set; }
}


基於元素的序列化指的是,將對象的屬性作為XML元素,對象的屬性值作為XML元素的子元素進行序列化,如下所示:

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
}


    Tom
    18

在XmlSerializer中默認使用基於元素的序列化方式。

四、對象轉XML時空值不轉C#

在C#中,當一個屬性的值為空時(如string類型的值為null或””),XmlSerializer會將這個屬性的值序列化成空元素(如 <Name />),而非空元素,並在反序列化時將這個屬性的值還原為null或””。如果我們希望在序列化時跳過空值屬性,可以使用以下代碼:

public static string ObjectToXml(T obj)
{
    var emptyNamespaces = new XmlSerializerNamespaces(new[] { XmlQualifiedName.Empty });
    var serializer = new XmlSerializer(typeof(T));
    var settings = new XmlWriterSettings
    {
        Indent = true,
        OmitXmlDeclaration = true
    };
    using (var stream = new StringWriter())
    using (var xmlWriter = XmlWriter.Create(stream, settings))
    {
        serializer.Serialize(xmlWriter, obj, emptyNamespaces);
        return stream.ToString();
    }
}

五、對象轉XML訪問有轉義符號怎麼辦

如果要將對象中的HTML中特殊字符(如”&”)轉換成XML實體字符(如”&amp;”),可以使用System.Security.SecurityElement.Escape()方法來實現:

public static string ObjectToXml(T obj)
{
    var emptyNamespaces = new XmlSerializerNamespaces(new[] { XmlQualifiedName.Empty });
    var serializer = new XmlSerializer(typeof(T));
    var settings = new XmlWriterSettings
    {
        Indent = true,
        OmitXmlDeclaration = true
    };
    using (var stream = new StringWriter())
    using (var xmlWriter = XmlWriter.Create(stream, settings))
    {
        var document = new XmlDocument();
        var navigator = document.CreateNavigator();
        using (var writer = navigator.AppendChild())
        {
            serializer.Serialize(writer, obj, emptyNamespaces);
            var escapedXml = System.Security.SecurityElement.Escape(writer.OuterXml);
            xmlWriter.WriteRaw(escapedXml);
            xmlWriter.Flush();
            return stream.ToString();
        }
    }
}

六、對象轉XML使用註解方式空值怎麼轉

在C#中,我們可以使用[XmlElement(IsNullable=true)]註解來處理屬性為空值時的序列化。如果這個屬性的值為空,XmlSerializer會將這個屬性的序列化成空元素,並在反序列化時還原為null。如果這個屬性的值不為空,XmlSerializer會將這個屬性的值序列化成非空元素。

七、對象轉換成數組

public static T[] ListToArray(IList list)
{
    var array = new T[list.Count];
    list.CopyTo(array, 0);
    return array;
}

以上代碼將IList類型的集合轉換成數組類型。

八、對象轉換為JSON字符串

using Newtonsoft.Json;

public static string ObjectToJson(T obj)
{
    return JsonConvert.SerializeObject(obj);
}

以上代碼使用了Newtonsoft.Json將對象序列化為JSON字符串。我們需要使用JsonConvert.SerializeObject()方法將對象序列化成字符串並返回。

九、對象轉成XML格式打印到控制台

using System.Xml.Serialization;
using System.IO;

public static void PrintObjectToXml(T obj)
{
    var serializer = new XmlSerializer(typeof(T));
    using (var stream = new StringWriter())
    {
        serializer.Serialize(stream, obj);
        Console.WriteLine(stream.ToString());
    }
}

以上代碼將對象序列化成XML字符串,並將XML打印到控制台。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/311343.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2025-01-05 13:23
下一篇 2025-01-05 13:23

相關推薦

發表回復

登錄後才能評論