代码之家  ›  专栏  ›  技术社区  ›  AllenG

xmldocument.load(xml)不从xmlserializer序列化代码生成根元素错误

  •  2
  • AllenG  · 技术社区  · 14 年前

    我有一个这样的班级:

    [XmlRoot"MyMessageType")]
    public class MyMessageType : BaseMessageType
    {
        [XmlElement("MessageId")]
        //Property for MessageId
    
        ...
        <snip>
    
        //end properties.
    }
    

    此类包含一个静态方法,用于创建要传递到Biztalk服务器的XmlDocument实例。像这样:

    public static XmlDocument GetMyMessageType(string input1, string input2 ...)
    

    GetMyMessageType 创建MyMessageType的实例,然后调用以下代码:

    XmlSerializer outSer = new XmlSerializer(instance.GetType());
    using (MemoryStream mem = new MemoryStream())
    using (XmlWriter _xWrite = XmlWriter.Create(mem))
    {
      outSer.Serialize(_xWrite, instance);
      XmlDocument outDoc = new XmlDocument();
      outDoc.Load(XmlReader.Create(mem));
      return outDoc;
    }
    

    当我尝试运行此代码时,我收到一个 XmlException “缺少根元素。”当我修改代码以输出到测试文件时,得到一个格式良好的XML文档。有人能告诉我为什么我可以输出到一个文件,而不是作为一个XML文档?

    1 回复  |  直到 14 年前
        1
  •  6
  •   Marc Gravell    14 年前

    你还没有重绕 MemoryStream 你甚至不知道作者 冲洗的 流向溪流。我想要一些更像:

    using (MemoryStream mem = new MemoryStream()) {
        outSer.Serialize(mem, instance);
        mem.Position = 0;
        XmlDocument outDoc = new XmlDocument();
        outDoc.Load(mem);
        return outDoc;
    }
    

    实际上,我甚至可以将 StringWriter 相反,节省一些编码/解码开销:

    string xml;
    using (StringWriter writer = new StringWriter()) {
        outSer.Serialize(writer, instance);
        xml = writer.ToString();
    }
    XmlDocument outDoc = new XmlDocument();
    outDoc.LoadXml(xml);
    return outDoc;