如何将模型(从 xsd.exe 构建)序列化为 XmlDocument?
Posted
技术标签:
【中文标题】如何将模型(从 xsd.exe 构建)序列化为 XmlDocument?【英文标题】:How to serialize model (built from xsd.exe) to 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 输出?
【问题讨论】:
你可以使用XmlNodeExtensions.SerializeToXmlDocument()
从this answer到How to create sets of the serialized objects C#。
或查看this answer 和this answer also 到How to create an XML document from a .NET object?,尽管未被接受,但它们是更好的答案,并展示了如何通过序列化直接创建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)
)
);
【讨论】:
以上是关于如何将模型(从 xsd.exe 构建)序列化为 XmlDocument?的主要内容,如果未能解决你的问题,请参考以下文章