我有以下方法将对象保存到文件:
// 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作为字符串返回给我(而不是将其保存到文件中)。我正在研究它,但尚未弄清楚。
我认为这对于熟悉这些对象的人可能真的很容易。如果没有,我最终会解决。
使用StringWriter而不是StreamWriter:
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。
toSerialize.GetType()
typeof(T)
T
XmlSerializer
Exception
另外,Ideone使用Mono执行代码;Exception使用Microsoft .NET运行时所得到的实际Message结果与Ideone上显示的结果有所不同,但是失败相同。
Message