一、对象转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/n/311343.html
微信扫一扫
支付宝扫一扫