小编典典

将对象序列化为字符串

c#

我有以下方法将对象保存到文件:

// Save an object out to the disk
public static void SerializeObject<T>(this T toSerialize, String filename)
{
    XmlSerializer xmlSerializer = new XmlSerializer(toSerialize.GetType());
    TextWriter textWriter = new StreamWriter(filename);

    xmlSerializer.Serialize(textWriter, toSerialize);
    textWriter.Close();
}

我承认我没有编写它(我只将其转换为带有类型参数的扩展方法)。

现在,我需要它来将xml作为字符串返回给我(而不是将其保存到文件中)。我正在研究它,但尚未弄清楚。

我认为这对于熟悉这些对象的人可能真的很容易。如果没有,我最终会解决。


阅读 238

收藏
2020-05-19

共1个答案

小编典典

使用StringWriter而不是StreamWriter

public static string SerializeObject<T>(this T toSerialize)
{
    XmlSerializer xmlSerializer = new XmlSerializer(toSerialize.GetType());

    using(StringWriter textWriter = new StringWriter())
    {
        xmlSerializer.Serialize(textWriter, toSerialize);
        return textWriter.ToString();
    }
}

请注意,在XmlSerializer构造函数中使用toSerialize.GetType()而不是使用它很重要typeof(T):如果使用第一个,则代码将覆盖的所有可能的子类T(对于该方法有效),而使用后一个,则在传递从派生的类型时将失败T。这是一些示例代码的链接,这些代码可以激发该语句并XmlSerializer使用Exceptionwhen
typeof(T),因为您将派生类型的实例传递给调用在派生类型的基类中定义的SerializeObject的方法:http:// ideone
.com / 1Z5J1

另外,Ideone使用Mono执行代码;Exception使用Microsoft
.NET运行时所得到的实际Message结果与Ideone上显示的结果有所不同,但是失败相同。

2020-05-19