我可以直接将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字符串。