我可以直接将XML序列化为字符串而不是使用C#的流吗?

此示例使用StringWriter来保存序列化数据,然后调用ToString()给出实际的string值:

 Person john = new Person(); XmlSerializer xmlSerializer = new XmlSerializer(typeof(Person)); StringWriter stringWriter = new StringWriter(); xmlSerializer.Serialize(stringWriter, john); string serializedXML = stringWriter.ToString(); 

有没有更简单/更清洁的方法来做到这一点? 所有Serialize()重载似乎都使用Stream或Writer。

更新:询问有关通过扩展方法序列化IEnumerable的类似问题。

有趣的扩展方法……

 var ret = john.ToXmlString() 

 public static class XmlTools { public static string ToXmlString(this T input) { using (var writer = new StringWriter()) { input.ToXml(writer); return writer.ToString(); } } public static void ToXml(this T objectToSerialize, Stream stream) { new XmlSerializer(typeof(T)).Serialize(stream, objectToSerialize); } public static void ToXml(this T objectToSerialize, StringWriter writer) { new XmlSerializer(typeof(T)).Serialize(writer, objectToSerialize); } } 

或多或少同样的解决方案,只需使用扩展方法:

 static class XmlExtensions { // serialize an object to an XML string public static string ToXml(this object obj) { // remove the default namespaces XmlSerializerNamespaces ns = new XmlSerializerNamespaces(); ns.Add(string.Empty, string.Empty); // serialize to string XmlSerializer xs = new XmlSerializer(obj.GetType()); StringWriter sw = new StringWriter(); xs.Serialize(sw, obj, ns); return sw.GetStringBuilder().ToString(); } } [XmlType("Element")] public class Element { [XmlAttribute("name")] public string name; } class Program { static void Main(string[] args) { Element el = new Element(); el.name = "test"; Console.WriteLine(el.ToXml()); } } 

我创建了这个帮助方法,但我还没有测试过它。 根据orsogufo的评论更新了代码(两次):

 private string ConvertObjectToXml(object objectToSerialize) { XmlSerializer xmlSerializer = new XmlSerializer(objectToSerialize.GetType()); StringWriter stringWriter = new StringWriter(); xmlSerializer.Serialize(stringWriter, objectToSerialize); return stringWriter.ToString(); } 

似乎没有人体实际回答了他的问题,这是不行的,没有使用流或编写器对象就无法生成XML字符串。