【问题标题】:C# XmlSerialization: Adding a wrapperC# XmlSerialization:添加包装器
【发布时间】:2014-08-28 22:24:33
【问题描述】:

我正在更改在我的应用程序中序列化数据的方法。到目前为止,我都是手动完成的,这创建了很多代码,但也给了我很大的灵活性。

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

现在唯一妨碍我的是我需要一个围绕 XML 内容的包装器。它只是包含应用程序名称的另一个标签。如何在应用程序内创建的 XML 文档周围添加此标签?

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

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

【问题讨论】:

    标签: c# xml winforms .net-3.5


    【解决方案1】:

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

    我基本上创建了一个“准备”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;
        }
    

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

    【讨论】:

      【解决方案2】:

      您通过向对象模型添加另一层来添加包装器元素; XmlSerializer通常是对象的镜像。所以;如果你想要一个根 &lt;MyApp&gt; 元素,然后添加:

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

      并序列化 SomeWrapper 而不是 YourExistingModel

      【讨论】:

      • 有相当多的类正在被序列化。这种包装器一般适用于我想要序列化的所有类吗?我可以使用 YourExistingModel 来引用不同类型的类(一般)吗?
      • @ElMac 这取决于您是否希望它们都具有相同的根元素名称和下一级元素名称...名称是否通用?
      • 根元素应该始终相同。下一个元素可以是例如“设置”或“内容”等。
      • @ElMac 那么我强烈推荐不同的根类型。您可以使用泛型类型来执行此操作,但它会涉及 XmlAttributeOverrides,这意味着手动缓存 XmlSerializer 实例(每个类型)以防止程序集泄漏等。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-01-27
      相关资源
      最近更新 更多