一、對象轉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實體字符(如”&”),可以使用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