问题标签 [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 投票
5 回答
6444 浏览

c# - 没有对象定义的二进制反序列化

我正在尝试读取二进制序列化对象,我没有它的对象定义/源。我在文件中看到了一个高峰并看到了属性名称,所以我手动重新创建了该对象(我们称之为它SomeDataFormat)。

我最终得到了这个:

现在我可以像这样反序列化它:

第一个可疑之处是只有 2 个字符串 ( SessionId& ) 在反序列化数据对象UserEmail中具有值。其他属性为 null 或仅为 0。这可能是有意的,但我仍然怀疑在反序列化过程中出现了问题。

第二个可疑的事情是,如果我重新序列化这个对象,我最终会得到不同的文件大小。原始(695 字节)。重新序列化的对象是 698 字节。所以有3个字节的差异。我应该得到与原始文件大小相同的文件大小。

查看原始文件和新的(重新序列化的)文件:

原始序列化文件:(zoom) 在此处输入图像描述重新序列化文件 :(zoom) 在此处输入图像描述

如您所见,在标题部分之后,数据似乎以不同的顺序排列。例如,您可以看到电子邮件和 sessionID 不在同一个地方。

更新:Will 警告我,“PublicKeyToken=null”之后的字节也不同。(03 <-> 05)

  • Q1:为什么两个文件中的值顺序不同?
  • Q2:为什么两个序列化对象相比多了 3 个字节?
  • Q3:我错过了什么?我怎么能这样做?

任何帮助表示赞赏。


相关问题类型: 1 2 3

0 投票
4 回答
1494 浏览

c# - .NET 二进制序列化元数据

一周前,我遇到了一种情况,我必须读取由其他人制作的另一个应用程序制作的二进制序列化对象。我只有 someSerializedData.bin 文件,所以我尝试手动重新创建未知对象的类定义,并且我能够这样做,因为序列化文件中的元数据。奇怪的是,我在谷歌上找不到任何工具。

Q1:为什么没有从二进制序列化文件/数据重新创建类定义的工具?

这引出了我的第二个问题

Q2:是否存在无法从序列化数据中恢复类定义的情况?(假设它没有以任何方式加密或混淆,我对涉及“默认”.NET Binaryserializer 属性的情况感兴趣,以禁用包含的类型信息和元数据)

0 投票
4 回答
12723 浏览

c# - DeflateStream 在 MemoryStream 上不起作用?

我有以下代码:

问题是它resultStream总是空的!

我在这里做错了什么?

0 投票
1 回答
374 浏览

c# - Objective C和C#之间任意对象的二进制序列化?

我们想在 Objective C 和 C# 之间有效地传递一个森林——一个具有值的字典,它可以是:字典、数组、集合、数字、字符串、字节缓冲区(在时间方面,空间是一个较小的问题)。Google 的 Protocol Buffers 看起来不错,但它们似乎只处理结构化数据,而我们的则是任意的。最终我们可以自己编写一个二进制(反)序列化器,但肯定这是之前完成的并在某处作为 FOSS 发布?

0 投票
2 回答
887 浏览

objective-c - Objective C中的二进制流库?

Objective C 中是否有与 C# 的 BinaryReader 和 BinaryWriter 等价的东西?例如,BinaryReader 将接受一个NSData*对象(或广义流),并具有诸如 、 等方法-(uint32_t)readUnsignedInt。BinaryWriter-(double)readDouble将是对称的,并且可以与NSMutableData*(或广义流)一起使用。

0 投票
3 回答
4875 浏览

c# - 如何序列化字体

我有一个班级,我[Serializable]为那个班级设置了属性。

在这个类中,我定义了一个字体类成员。但是当我尝试序列化时,它给了我一个错误,比如“system.drawing.font 无法序列化”

0 投票
3 回答
6014 浏览

c# - 如何为处理类型从一个程序集和命名空间移动到另一个程序集和命名空间的二进制格式化程序创建一个 SerializationBinder

上下文如下

  1. 我想通过将代码移动到不同的项目来重构代码
  2. 其中一些代码包含用于跨多个端点发送和接收数据的可序列化 DTO
  3. 如果我移动代码,序列化会中断(因此它与我的应用程序的旧版本不向后兼容)

这个问题的一个解决方案是 SerializationBinder,它允许我在某种意义上从一种类型“重定向”到另一种类型。

因此,我想创建一个 SerializationBinder 来满足这一需求。但是,它必须满足以下要求

  1. SerializationBinder 的输入应该是旧类型到新类型映射的列表。映射应包括旧程序集名称(无版本,无公钥令牌)和类型的旧全名(命名空间和名称)以及新程序集名称和类型的新全名
  2. 对于输入中的类型,应忽略程序集的版本号
  3. 如果我的类型恰好在泛型(列表、字典等)中,它应该处理泛型,而无需在输入中包含泛型
  4. 对于不在输入中的任何内容(即未移动的类型或 .NET 类型,例如数据集),它应该默认使用二进制序列化程序的开箱即用算法

这是可能的还是我在做梦?有什么东西已经这样做了吗?我认为这是一个常见问题。

到目前为止,我没有看到做 3 的简单方法,也根本没有做 4 的方法。

这是一个尝试

0 投票
0 回答
320 浏览

c# - C# BinaryFormatter 反序列化为现有对象

使用 BinaryFormatter,我如何覆盖一个类的反序列化方法,以便它返回这个类的现有实例而不是创建一个新实例?

0 投票
0 回答
427 浏览

c# - 二进制格式化程序序列化的字符串可以直接在记事本加载的写入文件中看到吗?

我尝试使用 C# 通过二进制格式化程序序列化一个包含大量字符串的大类:

读写速度比原来的XML S/L方式快一点。

然而,当我用记事本打开二进制文件时,虽然其中大部分是不可读的,但字符串的值仍然是原始值,看起来像根本没有被序列化:

我的朋友告诉我,这仍然可以改进。他说当字符串被序列化时,整个二进制文件完全不可读,可以进一步提高加载速度。真的吗?无论如何我仍然可以使用这个序列化文件吗?

0 投票
1 回答
6771 浏览

ruby - 在 Ruby 中使用 Marshal::dump 进行对象序列化时如何写入文件

假设我有Line类的对象线

线=线.新...

如何二进制序列化 line 对象?我试过:

但它创建了文件并且没有添加任何内容。我阅读了 Class: IO 文档,但我无法真正理解。