将C#类序列化为XML文本的更简单方法

在尝试回答另一个问题时,我将C#对象序列化为XML字符串。 这太令人惊讶了; 这是我能提出的最短的代码片段:

var yourList = new List() { 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()); 

结果还可以:

   1 2 3  

但是片段比我想象的要复杂得多。 我不敢相信你必须知道编码和MemoryStream这个简单的任务。

是否有更短的方法将对象序列化为XML字符串?

更短一点:-)

 var yourList = new List() { 1, 2, 3 }; using (var writer = new StringWriter()) { new XmlSerializer(yourList.GetType()).Serialize(writer, yourList); var xmlEncodedList = writer.GetStringBuilder().ToString(); } 

虽然这种先前方法存在缺陷值得指出。 它会生成一个utf-16标头,因为我们使用StringWriter,因此它不完全等同于您的代码。 要获得utf-8标头,我们应该使用MemoryStream和XmlWriter ,这是一行额外的代码:

 var yourList = new List() { 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()); } } 

编写扩展方法或包装类/函数来封装代码段。

您不需要MemoryStream ,只需使用StringWriter

 var yourList = new List() { 1, 2, 3 }; using (StringWriter sw = new StringWriter()) { var xs = new XmlSerializer(yourList.GetType()); xs.Serialize(sw, yourList); string xmlEncodedList = sw.ToString(); }