容易序列化的C#类为XML文本方式 [英] Easier way to serialize C# class as XML text
问题描述
在试图回答另一个问题,我是一个序列化的C#对象的XML字符串。这是令人惊讶的辛苦;这是最短的代码片段,我可以想出:
While trying to answer another question, I was serializing a C# object to an XML string. It was surprisingly hard; this was the shortest code snippet I could come up with:
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());
其结果是好的:
The result is okay:
<?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>
但片段是比我想应该是更加复杂。我不能相信你必须了解编码的MemoryStream对于这个简单的任务。
But the snippet is more complicated than I think it should be. I can't believe you have to know about encoding and MemoryStream for this simple task.
有序列化对象到XML字符串较短的方式?
Is there a shorter way to serialize an object to an XML string?
推荐答案
一个短一点: - )
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();
}
虽然有这个以前的做法,值得指出的一个缺陷。因为我们使用的 UTF-16 头=http://msdn.microsoft.com/en-us/library/system.io.stringwriter的.aspx> StringWriter的,所以它不是完全等同于你的代码。要获得 UTF-8
头,我们应该使用的的MemoryStream 和的XmlWriter 这是一个额外的行代码:
Although there's a flaw with this previous approach that's worth pointing out. It will generate an utf-16
header as we use StringWriter so it is not exactly equivalent to your code. To get utf-8
header we should use a MemoryStream and an XmlWriter which is an additional line of code:
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());
}
}
这篇关于容易序列化的C#类为XML文本方式的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!