C#Xml序列化:添加包装器

时间:2014-07-08 08:50:28

标签: c# xml winforms .net-3.5

我正在改变在我的应用程序中序列化数据的方法。到目前为止,我手动完成了所有操作,创建了大量代码,但也给了我很大的灵活性。

现在我正在使用XmlSerializer,并创建了一个DataTransferModel,以便以我想要的方式提供数据。

现在唯一能阻挡我的方法是我需要有一个围绕XML-Content的包装器。它只是包含应用程序名称的其他标记。如何在应用程序内创建的XML-Documents周围添加此标记?

谢谢,如果您需要更多信息,请不要犹豫不决。

编辑:标签应该是文档中的第一个标签。

2 个答案:

答案 0 :(得分:1)

通过向对象模型添加另一个图层来添加包装元素; XmlSerializer 通常是对象的镜像。所以;如果你想要一个根<MyApp>元素,那么添加:

[XmlRoot("MyApp")]
public class SomeWrapper {
    public YourExistingModel SomeName {get;set;}
}

并序列化SomeWrapper而不是YourExistingModel

答案 1 :(得分:1)

所以,我使用自定义方法解决了这个问题,该方法可以根据需要更改XmlDocument

我基本上创建了一个&#34;准备&#34; XmlDocument,在原始标签周围添加包装标签。在我必须使用XmlDocument之前,每次都可以调用此方法。

    /// <summary>
    /// Prepares the document to export it.
    /// Adds the Wrapper tags
    /// </summary>
    /// <param name="contentDocument">The Document to prepare.</param>
    /// <returns>Returns the prepared document.</returns>
    private static XmlDocument PrepareExportDocument(XmlDocument contentDocument)
    {
        XmlDocument returnDoc = new XmlDocument();

        XmlNode rootElement = returnDoc.CreateElement("Wrapper-Tag");

        XmlNode importedNode = returnDoc.ImportNode(contentDocument.DocumentElement, true);

        rootElement.AppendChild(importedNode);

        returnDoc.AppendChild(rootElement);

        return returnDoc;
    }

如果您有更好的方法,或者您觉得这种方法不正确,请随意发表评论或添加您自己的答案。现在我将这个答案标记为已接受。