【问题标题】:How does one serialize an XDocument object?如何序列化 XDocument 对象?
【发布时间】:2011-10-09 21:48:39
【问题描述】:

我想序列化一个XDocument 对象。我写了这段代码。

        XDocument signup_xml_file = new XDocument(
            new XDeclaration("1.0", "utf-8", "yes"),
            new XComment("signup_xml_file"),
            new XElement("Student",
                new XElement("univ_id", univ_id),
                new XElement("personal_id",personal_id),
                new XElement("user_name", user_name)));
        client.Connect(host_name, port);
        //connect to the server .
        bf.Serialize(client.GetStream(), signup_xml_file); // serialize the signup_xml_file

尝试序列化XDocument 时出现以下异常。有什么方法可以使XDocument 类可序列化,还是有其他方法可以发送我的XDocument

在程序集“System.Xml.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089”中的类型“System.Xml.Linq.XDocument”未标记为可序列化。

【问题讨论】:

    标签: c# .net xml serialization


    【解决方案1】:

    XDocument 不打算被序列化。在某种程度上,它们本身就是序列化器。

    但你可以简单地写它们:signup_xml_file.Save(client.GetStream());
    这也消除了串行器开销。

    编辑:

    另一方面,你需要

    var doc = XDocument.Load(someStream);
    

    【讨论】:

    • 保存 xml 文件的问题: 1- 客户端必须将 xml 文件保存在硬盘中 2- 当服务器收到文件时,它必须将其保存在服务器 dick 中然后加载来自 Xdocument.load("path") 的文件 3- 从服务器中删除文件
    • 不,对方可以很容易地从 Stream 中加载它。请参阅编辑。不需要序列化器不需要的文件。
    【解决方案2】:

    我看不出有什么理由要序列化 ​​XDocument 对象。只需序列化您可以通过在文档上调用ToString() 获得的 XML 字符串。

    而且我看不出有任何理由在这里使用二进制序列化。如果您真的不需要它,您可以将 XML 字符串写入输出。

    【讨论】:

    • 我想将 xml 文档中的数据发送到服务器,所以我必须序列化它才能发送??哪里错了??
    • 你能解释一下你的意思吗??
    • 您不想发送XDocument 对象,使用二进制序列化进行序列化。您希望以字符串的形式发送实际的 XML 文档。为此,您必须从XDocument 获取字符串。
    • 对于小型 XML 文档使用 ToString 很好,但是如果您正在使用大型 XML 文档,那么最好使用流以避免仅在片刻内分配大量内存。 Streams 通过降低 GC 压力来保持一切顺利运行。 My answer 表达了我的意思。
    • 序列化 XDocument 的一个很好的理由是一次性加密内容。所以这是有道理的。在这种情况下,使用 XmlTextWriter 写入字符串。然后加密字符串。
    【解决方案3】:

    如果您想更好地控制XDocument 的序列化,请使用WriteTo 函数并创建您自己的XmlWriter

    这是一个例子:

    using (new XmlTextWriter(stream, Encoding.UTF8) { Formatting = Formatting })
        _document.WriteTo(xmlTextWriter);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-27
      • 2011-12-15
      • 1970-01-01
      • 2015-06-28
      • 2011-04-06
      相关资源
      最近更新 更多