容易序列化的C#类为XML文本方式 [英] Easier way to serialize C# class as XML text

查看:143
本文介绍了容易序列化的C#类为XML文本方式的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在试图回答另一个问题,我是一个序列化的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 头=htt​​p://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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆