问题标签 [binaryformatter]

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 投票
1 回答
1919 浏览

c# - BinaryFormatter 异常

我正在尝试将对象图从服务器进程移动到客户端。它有效。至少当客户端和服务器都在我的开发虚拟机上时它可以工作。当我在我的基础机器上运行服务器(开发虚拟机上的客户端)时,它也可以工作。

但是,当我在媒体中心 PC 上运行服务器时,它停止工作。例外是:

二进制流“0”不包含有效的 BinaryHeader。可能的原因是无效的流或序列化和反序列化之间的对象版本更改。

所有三台 PC 都是 x64 Windows 7 机器。我正在使用 TCPClient 和 TCPListener 以及BinaryFormatter该类来完成繁重的工作。

正在传输的数据是使用标准FileStream对象从文件中读取的。

如果在客户端我将缓冲区序列化为文件,内容(根据 BeyondCompare)实际上似乎不同?!?

我的对象上的所有字符串属性都在 setter 中进行了 Base64 编码,并在 getter 中进行了解码。

我可以发布代码,但我不确定问题区域在哪里?有任何想法吗?

0 投票
1 回答
1920 浏览

vb.net - BinaryFormatter.Serialize 与 MemoryStream 问题

我在使用 BinaryFormatter.Serialize 时遇到问题。

我有这个通用的扩展方法来通过二进制序列化“克隆”一个对象:

我还有一个名为“Mode”的类,它有一个“Clone”方法,如下所示:

在我的 GUI 中,我有一个函数允许克隆选定的 Mode 对象。用户输入一系列新模式名称,并且例程通过这些新名称循环创建所选模式的克隆:

所以基本上应该创建所选模式对象的一个​​或多个克隆,将 Name 属性设置为正确的值,并将新的模式对象添加到父对象。这涉及对 Mode.Clone 方法的 X 次调用以及对 CloneViaSerialization 扩展方法的 X 次调用。

这是我的问题。在多次调用 CloneViaSerialization 期间,MemoryString 长度(如 Debug.WriteLine 语句所示)几乎是上一次调用的两倍。例如,制作五个克隆,调试输出为:

毫秒长度 = 106882 毫秒长度 = 188048 毫秒长度 = 350482 毫秒长度 = 675350 毫秒长度 = 1325086

这是杀戮的表现。超过 7 或 8 个克隆会使应用程序停止运行。为什么会发生这种情况?USING 块应该确保 MemoryString 被处理掉,对吧?不应该每次都创建一个新的 MemoryString 吗?我认为由于相同的原始模式对象是序列化的源,因此 MemoryString 长度将是相同的。有任何想法吗?我在这里想念什么?

提前致谢!

0 投票
1 回答
237 浏览

.net - 使用 BinaryFormatter 序列化不同但相等的对象图是否会产生相同的二进制表示?

我正在研究基于对象模型的序列化散列它。

如果我使用 .NET BinaryFormatter 序列化对象图,对于所有涉及的对象都由相同值组成的另一个对象图,序列化表示是否保证字节对字节完全相同?

直觉上,我是这么认为的,但我不确定对象/引用 ID 是否会以某种方式影响实际的序列化表示。

提前致谢。

0 投票
4 回答
8366 浏览

c# - 带列表的序列化绑定器

我正在尝试BinaryFormatter跨不同版本的程序集进行工作。我要反序列化的实际类在每个程序集版本中完全相同,但是在反序列化时,因为对象被序列化包括它们来自的程序集名称,所以BinaryFormatter抱怨它找不到正确的程序集。所以我创建了一个自定义SerializationBinder,告诉BinaryFormatter总是反序列化到当前的程序集版本。

我的方案可以正常工作并且可以正确反序列化对象,但如果我的对象是 T 的列表,则它不起作用,其中 T 是从我的程序集的旧版本序列化的类型。

有什么方法可以使它与列表和其他泛型类型一起工作,其中类型参数是我的程序集中的一个类?

0 投票
1 回答
229 浏览

c# - BinaryFormattere 在存在的文件上抛出 FileNotFoundException,为什么?

我用这段代码序列化了一个带有一些属性的文件:

p>

然后当我尝试使用它时:

p>

我得到这个异常:ileNotFoundException:无法加载文件或程序集'922ab9ba88eba49469a1eeab68bc0baa'或其依赖项之一。该系统找不到指定的文件。

并且该文件存在,如果我删除该文件,则会出现此异常: FileNotFoundException:找不到文件“C:\ Users \ Gilson \ Documents \ AntHill \anthill \ Game.data”

关于如何解决这个问题的任何想法?我是 C# 新手,所以我不知道该怎么做。

0 投票
1 回答
373 浏览

c# - BinaryFormatter.Deserialize() 方法在 AutoCAD 插件中不起作用

当我在 AutoCAD 插件的 inDeserialize实例上调用该方法时,之后的下一个代码行不会执行。这可能是什么原因造成的?提前感谢您的帮助。System.Runtime.Serialization.Formatters.Binary.BinaryFormatterIExtensionApplication.Initialize

0 投票
1 回答
426 浏览

c# - BinaryFormatter ,精确的 TYPE-SIZE 缓冲区

我有这个可序列化的类:

知道 BYTE 类型是 1 字节,SHORT 类型是 2 字节,INT 类型是 4 字节,我正在等待 7 字节缓冲区,但使用以下代码,我得到了 232 字节的缓冲区大小:

我想通过 IP 发送“确切类型大小的缓冲区”,而无需使用如下代码:

我需要这个类是一个类而不是一个结构。有什么办法吗?

0 投票
4 回答
3312 浏览

vb.net - 当底层类发生轻微变化时,我可以反序列化一个对象吗?

我编写了一个自定义类MyClass并用<Serializable()>属性标记它。我的硬盘驱动器上有一组二进制文件,我使用BinaryFormatter来自MyClass.

我最近MyClass稍微改变了结构(添加了一些属性,删除了一些属性,更改了一些方法等)。

当我尝试使用下面的代码将现有对象反序列化到这个更改的类时会发生什么?我已经尝试过了,没有抛出错误或任何东西 - 但是当类改变时它肯定不能正确反序列化?即使我已经更新了类,有没有办法从序列化文件中获取一些有用的信息?

谢谢。


这是我用来进行序列化的代码:

并做我正在使用的反序列化:

在哪里deserializeObject

0 投票
2 回答
406 浏览

c# - BinaryFormatter 对象图升级

在我的对象图中,我有类似的东西

我有各种各样的狗列表和对狗的参考。

由于 Dog 在软件创建之初只是动物,因此我不需要任何基类。现在,这种需求已经出现,现在我想拥有

但是:当我反序列化 OLD 存档时,我没有任何狗。他们根本没有从档案中反序列化。

我想要的是一些关于如何做的建议。如果我需要新的类层次结构并将对象从旧 Dog 手动复制到新的 TheDog,很好,但如果可能的话想避免它。

编辑:一些 .NET 大师,为什么我没有狗?

0 投票
2 回答
2345 浏览

android - Android 中的 BinaryFormatter 序列化/反序列化替代方案

我有一个使用 BinaryFormatter 序列化方法在 C# 中序列化的类。有什么办法可以在android应用程序中反序列化它。我的意思是在 android 中有 BinaryFormatter 的替代品吗?