代码之家  ›  专栏  ›  技术社区  ›  Brandon Boone

序列化:将预先生成的XML写出到XML编写器。实现IXML可序列化C#

  •  2
  • Brandon Boone  · 技术社区  · 14 年前

    背景/目标

    或多或少,我尝试创建一组嵌套的对象,这些对象将被序列化为XML。

    基本的层次结构如下:

    • 文件
    • 文件
    • 内容

    它会翻译成类似的东西(但这仍然是基本的变化)

    <Documents>
     <Document>
      <Contents>
       Custom objects
      </Contents>
     </Document>
     <Document>
      <Contents>
        Custom objects
      </Contents>
     </Document>
    </Documents>
    

    因为这些对象不能本机序列化,所以它们必须实现IXML可序列化接口。( 在完整的版本中,每个级别包含其他需要序列化外观的对象、字典类型等,还包括序列化私有变量。 )

    途径

    我的方法如下

    1. 序列化文档对象
    2. 文档对象将序列化其所有子文档对象
    3. 这些子文档对象将序列化内容对象
    4. 等等…

    问题

    IXMLSerializable提供了一个XmlReader和XmlWriter来序列化和反序列化对象。如何将序列化XML附加到XML编写器?我不想写出一个元素,我想写出一个XML块。

    换句话说,我的内容对象将写出元素字符串

    从子元素

    公共void writexml(XmlWriter编写器) {

        writer.WriteElementString("Type", m_sType);
        writer.WriteElementString("Assembly", m_sAssembly);
        writer.WriteElementString("XSL", m_sXSL);
        writer.WriteElementString("ID", m_sID);
    }
    

    但是我的文档对象需要写出序列化的子对象

    public void WriteXml(XmlWriter writer)
    {
        //Fake CODE 
        writer.Append(ChildObject.Serialize());
    }
    

    这部分我好像不明白。

    如果我通过writer.writeElementString(“childObject”,childObject.serialize())附加XML,那么我的XML将被转义(<变为<等等)。

    这是不可能发生的,因为尽管XML将用于跨系统共享对象,但它也将通过XSLT格式化并显示。

    我的方法不对吗?

    有没有办法防止逃跑或者我错过了什么方法?

    沿着这条线的任何东西都会非常感激。

    1 回复  |  直到 14 年前
        1
  •  3
  •   btlog Stefan Wick MSFT    14 年前
    public void WriteXml(XmlWriter writer)
    {
        writer.WriteRaw(ChildObject.Serialize());
    }