And*_*mar 8 c# xml xml-serialization
在尝试回答另一个问题时,我将C#对象序列化为XML字符串.这真是令人惊讶的困难; 这是我能提出的最短的代码片段:
var yourList = new List<int>() { 1, 2, 3 };
var ms = new MemoryStream();
var xtw = new XmlTextWriter(ms, Encoding.UTF8);
var xs = new XmlSerializer(yourList.GetType());
xs.Serialize(xtw, yourList);
var encoding = new UTF8Encoding();
string xmlEncodedList = encoding.GetString(ms.GetBuffer());
Run Code Online (Sandbox Code Playgroud)
结果还可以:
<?xml version="1.0" encoding="utf-8"?>
<ArrayOfInt
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<int>1</int>
<int>2</int>
<int>3</int>
</ArrayOfInt>
Run Code Online (Sandbox Code Playgroud)
但是片段比我想象的要复杂得多.我无法相信你必须知道编码和MemoryStream这个简单的任务.
是否有更短的方法将对象序列化为XML字符串?
Dar*_*rov 19
稍短一些:-)
var yourList = new List<int>() { 1, 2, 3 };
using (var writer = new StringWriter())
{
new XmlSerializer(yourList.GetType()).Serialize(writer, yourList);
var xmlEncodedList = writer.GetStringBuilder().ToString();
}
Run Code Online (Sandbox Code Playgroud)
虽然这种先前的方法存在缺陷值得指出.它会生成一个utf-16标头,因为我们使用StringWriter,因此它不完全等同于您的代码.要获取utf-8头,我们应该使用MemoryStream和XmlWriter,这是一行额外的代码:
var yourList = new List<int>() { 1, 2, 3 };
using (var stream = new MemoryStream())
{
using (var writer = XmlWriter.Create(stream))
{
new XmlSerializer(yourList.GetType()).Serialize(writer, yourList);
var xmlEncodedList = Encoding.UTF8.GetString(stream.ToArray());
}
}
Run Code Online (Sandbox Code Playgroud)