问题标签 [binary-serialization]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
664 浏览

c# - C# 仅将值序列化为字节流

是否有可能将类的属性自动序列化为 byte[] 数组或流。

上面的这个例子序列化了整个类,包括命名空间、类名、变量名等。如果没有自动化解决方案,它将手动完成。

问候,马克

0 投票
2 回答
28059 浏览

serialization - protobuf-net 是否具有用于序列化的内置压缩?

我在和 protobuf-net 序列化程序之间进行了一些比较,并对我的发现BinaryFormatter感到非常满意,但奇怪的是 protobuf-net 设法将对象序列化为一个比我只写值时得到的更小的字节数组将每个属性转换为没有任何元数据的字节数组。

我知道如果你设置AsReference为protobuf-net 支持字符串实习true,但在这种情况下我没有这样做,那么 protobuf-net 默认提供一些压缩吗?

以下是一些您可以运行自己查看的代码:

编辑:忘记添加,SimpleObject该类如下所示:

0 投票
3 回答
2114 浏览

c# - C# 和 Android/Java - 跨语言二进制流写入器/读取器?(对于原语和 UTF-8 字符串)

在 C# 和 Android 的 Java 之间对一些自定义数据进行二进制序列化/反序列化的最简单方法是什么?我想为 Java 找到类似于 C# BinaryWriter 和 BinaryReader 的东西——它支持编写原语(如 uint16)和 UTF-8 字符串。

或者也许有更好的方法?

编辑:编译时不知道数据的结构

示例编写:

0 投票
1 回答
781 浏览

c# - 反序列化为命名空间已更改的类型

使用 .NET 4/C#...

我需要反序列化包含名为 ns1.X 的类型的序列化表示的旧配置文件。序列化已使用BinaryFormatter.

问题是,经过一轮重构后,类型 X 已移至不同的命名空间,例如 ns2.X 。

我尝试创建一个从 ns2.X 派生的新的空 ns1.X 类型,虽然这避免了“无法找到类型 ns1.X ”错误,但反序列化对象中的属性都是null. 此外,在此过程中不会调用任何 ctor。

有什么建议么?

0 投票
2 回答
2520 浏览

c# - 如何使用 protobuf-net 或其他序列化程序序列化第 3 方类型?

我有List<HtmlAgilityPack.HtmlNode>,但 protobuf-net 给我错误,它没有合同。当我没有来源时,如何为其指定合同?它实际上说它无法推断类型,但我认为这是因为我没有使用它的属性,对吧?

默认的二进制序列化程序也会抱怨,因为该类型未标记为可序列化。

编辑:错误信息是:

0 投票
1 回答
347 浏览

c# - C# 中的零星序列化失败

我们将 Excel 导入到我们的系统中,并对其进行了非常严格的测试。最近,我们注意到零星的序列化错误。

这些错误在我们针对导入的自动化测试中出现,一遍又一遍地使用相同的文件。如果我们每次都收到这个错误,我会理解,但同样的序列化过程可能会失败一次而下一次失败,这似乎很奇怪。

0 投票
2 回答
1199 浏览

c++ - boost::archive::binary_(i/o)归档可移植性

从一台 Linux x86_64 机器到另一台 Linux x86_64 机器的 boost 二进制存档是否“可移植”?

该文档表明它是,通过使用术语native binary,但是,我还没有能够做到这一点。是“我的错”,还是这样的事情不可能?

我确实知道便携式二进制档案,但我知道它们没有经过很好的测试......

编辑:除了 SoapBox 的回答,我发现两台机器上的 boost 库版本需要相同

0 投票
3 回答
399 浏览

c# - .NET 中的序列化

我的任务是序列化和反序列化一个对象。

我想知道:

  • 我的对象是否以我正在做的方式序列化
  • 我如何知道我的对象正在被序列化或反序列化

我没有在序列化方法中传递对象,而是传递object.properties. 这会以任何方式影响它吗?

0 投票
1 回答
548 浏览

c# - 可变 F# 记录的二进制序列化

我使用二进制序列化来保存 C# 类中的 F# 记录。一切正常:

F#:

C#:

现在,我正在重构我的 F# 模块,我希望有一个可变记录来序列化:

这样文件就被创建了,但是当我尝试反序列化它时,我得到一个空对象。
除了添加的 mutable 关键字之外,我没有改变我之前的实现。

我的问题是:可变 F# 记录的序列化有什么问题吗?或者它自己的序列化是正确的,我必须在我的代码中的其他地方寻找不同的错误?

编辑:

即使通过建议的@Brian 之类的方法访问记录,它似乎也不起作用。

这里有更多细节。当我以这种方式反序列化先前保存的对象时(在没有将 game_state 声明为可变的情况下工作):

我得到以下异常:

FSharp.Core.dll 中的“System.ArgumentNullException”

0 投票
0 回答
727 浏览

c# - 未调用构造函数时的显式 BinaryFormatter 序列化

关于我的问题的一些背景知识: 我有很多实现ISerializable并设计为使用显式BinaryFormatter方法序列化的类: .ctor(SerializationInfo info, StreamingContext context)void GetObjectData(SerializationInfo info, StreamingContext context) 最近发现BinaryFormatter在反序列化对象时并不总是调用构造函数。据说,BinaryFormatter应该将对象图逐位复制到内存中,因此不会调用“已构造”对象上的构造函数。这对我不起作用:我的私有成员在OnDeserialized被调用并且构造函数没有运行时总是空引用。如果我仍然可以检索由 收集的序列化数据,则可能会解决此问题,但是除了使我可以访问该对象GetObjectData的构造函数之外,我找不到任何东西。SerializationInfo

那么我的问题 是:除了 之外,还有什么方法.ctor(SerializationInfo info, StreamingContext context)可以检索在 期间收集的值void GetObjectData(SerializationInfo info, StreamingContext context)吗?

或者: 任何线索如何BinaryFormatter决定是否调用构造函数?如果我可以强制BinaryFormatter始终使用构造函数,我相信我的问题会得到解决。