【问题标题】:How to serialize model (built from xsd.exe) to XmlDocument?如何将模型(从 xsd.exe 构建)序列化为 XmlDocument?
【发布时间】:2020-12-03 17:37:21
【问题描述】:

查看下面的代码,我想看看如何从 xsd.exe 生成的对象模型中提供 XmlDocument:

var myModelObj = new MyModel();
var xmlDoc = new XmlDocument();
string xmlStr = null;
XmlWriterSettings settings = new XmlWriterSettings();
settings.OmitXmlDeclaration = true;
System.IO.StringWriter sw = new System.IO.StringWriter();
using (var xmlWriter = XmlWriter.Create(sw))
{
    System.Xml.Serialization.XmlSerializer serializer = new System.Xml.Serialization.XmlSerializer(typeof(Models.MyModel));
    serializer.Serialize(xmlWriter, myModelObj);
    xmlWriter.Flush();
    // xmlDoc = ______________ ????
    xmlStr = sw.ToString();
}

目的是使用 xml(XmlDocument?)为内存存储提供服务,我最终可以使用它来生成加密流或文件输出。谢谢!

更新:

这行得通吗?

xmlDoc.Load(sw.ToString());

有没有办法更直接地从 XmlSerializer 的 Serialize 方法生成 XmlDocument 输出?

【问题讨论】:

标签: c# xml serialization stream xmldocument


【解决方案1】:

通过dbc审核suggested answer,我创建了扩展:

public static class XmlExtensions
{
    public static XmlDocument SerializeToXmlDocument<T>(this T o)
    {
        return SerializeToXmlDocument(o, new XmlSerializer(o.GetType()));
    }

    public static XmlDocument SerializeToXmlDocument<T>(this T o, XmlSerializer serializer)
    {
        XmlDocument doc = new XmlDocument();
        using (XmlWriter writer = doc.CreateNavigator().AppendChild())
            serializer.Serialize(writer, o);
        return doc;
    }
}

并像这样实现:

var xmlDoc = myModelObj.SerializeToXmlDocument(
    new System.Xml.Serialization.XmlSerializer(
        typeof(Models.MyModel)
        )
    );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-27
    • 2011-02-11
    • 1970-01-01
    • 1970-01-01
    • 2014-12-14
    相关资源
    最近更新 更多