一、对象转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打印到控制台。