将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(); }
- Dapper:unit testingSQL查询
- 从IEnumerable <IEnumerable > linq中选择IEnumerable
- 正则表达式匹配拉href链接和字符串在 之间
- 为什么我的WPF单选按钮与中心垂直对齐?
- C#JsonConvert.DeserializeAnonymousType失败
- SQL 2008 – INFORMATION_SCHEMA视图中的外键约束
- System.Messaging – 为什么MessageQueue不提供异步版本的Send
- 如何使用c#的REGEX删除字符之间的空格,制表符,换行符?
- 如何在UWP / C中使用svg文件资源设置AppBarButton图标#