gpt4 book ai didi

C#:DataContractSerializer 和不同的流

转载 作者:行者123 更新时间:2023-11-30 12:13:04 25 4
gpt4 key购买 nike

我想使用 DataContractSerializer,但我对 WriteObject 方法中的 Stream 参数感到困惑 - 我知道我可以使用 MemoryStreamXmlWriter。我想知道:

  • 流选择如何影响序列化?它会影响对象的大小吗?
  • 使用 MemoryStream 时,我总是得到一个二进制对象吗?

这些问题可能很基本,但我一直在谷歌搜索,找不到明确的答案。谢谢。

最佳答案

DataContractSerializer 本质上是一个基于 xml 的序列化程序。如果你传递一个Stream,它会构造一个XmlWriter(具体来说,一个XmlDictionaryWriter)来包装这个流,然后核心序列化代码写入到 XmlWriter

How is the serialization affected by the stream selection? Does it affect the size of the object?

使用不同的 Stream 实例不会影响内部发生的事情,但是与传入 XmlWriter 相比,此处可能存在轻微 差异,具体取决于编码 是什么。如果你传递一个Stream,那么DataContractSerializer使用UTF-8;但是如果您将 XmlWriter 传递给它,您可以指定不同的编码。

When using MemoryStream, do I always get a binary object?

MemoryStreambyte[] 的包装器,是的:一旦你调用了 .ToArray() 之后你就二进制。然而,它是二进制的,恰好是xml。两者都可以。

如果您想要实际上二进制的序列化(意思是:基本上是二进制序列化格式,而不是 xml/json/csv/等),那么可以考虑像 protobuf-net 这样的东西。

关于C#:DataContractSerializer 和不同的流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12365303/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com