代码之家  ›  专栏  ›  技术社区  ›  Xavier Poinas

使用DataContractSerializer序列化时缺少XML结尾

  •  4
  • Xavier Poinas  · 技术社区  · 14 年前

    我使用以下方法将各种对象序列化为XML。然后我将XML写入一个文件。所有的物体都有适当的 [DataContract] [DataMember] 属性。

        public static string Serialize<T>(T item)
        {
            var builder = new StringBuilder();
            var serializer = new DataContractSerializer(typeof(T));
    
            using (var xmlWriter = XmlWriter.Create(builder))
            {
                serializer.WriteObject(xmlWriter, item);
                return builder.ToString();
            }
        }
    

    序列化工作正常,但是,我缺少内容的结尾。例如,字符串不包含完整的XML文档:结尾将被截断。有时字符串正好结束在标记的中间。

    似乎没有一个混合长度会引起问题:我有18K的字符串是不完整的,我有80K的字符串也是不完整的。

    XML结构相当简单,深度只有6-8个节点。

    我错过什么了吗?

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

    xmlWriter 你打电话的时候没有脸红 ToString() 尝试:

        using (var xmlWriter = XmlWriter.Create(builder))
        {
            serializer.WriteObject(xmlWriter, item);
        }
        return builder.ToString();
    

    这样做了 托斯特林() 之后 这个 Dispose() XMLX ,这意味着它将把任何缓冲数据刷新到输出( builder 在这种情况下)。