c# - 使用 DataContractSerializer 序列化时缺少 XML 的末尾

标签 c# .net serialization

我使用以下方法将各种对象序列化为 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 个节点深。

我错过了什么吗?

最佳答案

xmlWriter 在您调用 ToString() 时未刷新;尝试:

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

这会在 xmlWriter 上执行 ToString() Dispose(),这意味着它将刷新任何缓冲数据到输出(在本例中为 builder)。

关于c# - 使用 DataContractSerializer 序列化时缺少 XML 的末尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3682486/

相关文章:

c# - 如何将 Linq 查询传递给方法?

c# - 单元测试 - 依赖测试

serialization - Thrift 与 Protocol Buffers 最大的区别是什么?

java - 反序列化 XML 文件而不转换 xml 文件

c# - Visual Studio : Find class I'm in

c# - 将 int(或任何值类型)存储为对象并将它们转换回 int(或值类型)是否有任何成本?

c# - 将数据写入 CSV 时如何排除 header

.net - 如何反序列化 NServiceBus XML 消息?

c# - Azure Function 应该在错误时记录或抛出异常吗?

c# - Windows 应用程序中 DataGridView 中的货币格式