一、對象轉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-tw/n/311343.html
微信掃一掃
支付寶掃一掃