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

serialization - 在解析完成之前遇到流结束。序列化异常

任何人都可以帮助这种方法吗?我有一种将文件反序列化为类型的通用方法。

知道为什么我会得到这个 SerializationException 吗?

谢谢你。

0 投票
2 回答
1835 浏览

c# - 二进制对象图序列化

我正在寻找关于 .net 应用程序中序列化的建议。该应用程序是桌面/厚客户端应用程序,序列化表示持久化的文档格式。对序列化程序的要求是

  • 必须允许序列化字段,而不仅仅是公共属性。
  • 不得要求无参数构造函数。
  • 必须处理一般对象图,即不仅有 DAG,还有共享/双向引用。
  • 必须使用框架类(例如序列化字典)。

目前我们使用 BinaryFormatter 可以很好地处理上述所有问题,但是大小/性能和版本容差是一个问题。我们使用 [OnDeserialized/ing] 属性来提供兼容性,但它不允许在没有复杂使用代理等的情况下进行大型重构(例如命名空间更改)。

一个理想的解决方案是替代 BinaryFormatter,它可以与我们现有的 [NonSerialized] 注释等一起使用,但性能更好,并且生成的格式更小且更易于维护。

我已经查看了不同的 protobuf 实现,尽管这些天似乎可以序列化一般对象图/枚举/结构,但序列化具有许多框架集合类型等的复杂图似乎并不容易。此外,即使我们可以让它与字段而不是属性一起工作,我理解这仍然意味着必须向所有类添加无参数构造函数和 protobuf 注释(域大约有 1000 个类)。

所以问题:

  • 是否有任何“替代”二进制格式化程序,提供有据可查的格式,性能更好?
  • 协议缓冲区是否适合持久化包括框架类型在内的大型通用对象图?
0 投票
3 回答
5138 浏览

c# - .NET 中的程序集独立序列化

我使用序列化/反序列化技术。BinaryFormatter 类。每次创建新程序集时,即使类结构相同,BinaryFormatter 也无法反序列化二进制数据,但程序集版本不同。如果类结构保持不变,是否可以在不检查程序集版本的情况下反序列化二进制缓冲区?

0 投票
1 回答
1317 浏览

c# - BinaryFormatter 中的引用完整性

Protobuf-net 中 AsReference 选项的存在以及 BinaryFormatter 是“图形序列化程序”的词使我假设 BinaryFormatter 不维护引用并且它会复制每个对象。

但我做了一些测试,发现单个 BinaryFormatter Serialize() 或 Deserialize() 调用中的所有引用即使对于递归引用也是如此。

我可以确认 BinaryFormatter 确实维护引用吗?这与 Protobuf-net 有何不同?好像我对“图形序列化”的理解不正确?我还应该注意什么?

提前致谢。

0 投票
3 回答
3261 浏览

.net - .NET 中的序列化和混淆

我有一个二进制文件,我想对其进行混淆处理并分发给用户。让我们假设我使用我的二进制文件的未混淆版本使用现成的 .NET 二进制格式化程序来序列化数据。然后我们可以用混淆的二进制文件反序列化数据吗?

我想分发混淆的二进制文件和序列化的数据。如果上述问题的答案是肯定的,我可以在用户之间共享序列化数据。否则,我将不得不向每个用户提供单独的序列化数据。

0 投票
1 回答
781 浏览

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

使用 .NET 4/C#...

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

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

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

有什么建议么?

0 投票
1 回答
1096 浏览

.net - 在 .NET 中使用 BinaryFormatter 序列化多维数组时的性能问题

我正在使用BinaryFormatter序列化一个相当简单的多维浮点数组,尽管我怀疑任何原始类型都会出现问题。我的多维数组包含 10000x16 个浮点数(160k),并且在我的 PC 上以 ~8 MB/s 的速度进行序列化(60 秒基准写入 ~500 MB 到 SSD 驱动器)。代码:

做同样的事情,但使用 160k 浮点数的一维数组,相同数量的数据以 ~179 MB/s 的速度序列化到磁盘。速度提高 20 倍以上! 为什么使用序列化二维数组的BinaryFormatter性能如此糟糕? 内存中两个数组的底层存储应该是相同的。(我已经完成了不安全的本机 pin_ptr 并在 C++/CLI 中复制到二维数组和从二维数组复制)。

一个骇人听闻的解决方案是实现ISerializable并执行 memcopy(不安全/ptr pinning/block memcopy)将 2D 数组转换为 1D 数组并将其和维度序列化。我正在考虑的另一个选择是切换到protobuf-net.

0 投票
2 回答
1389 浏览

web-applications - 如何将 Java Web 应用程序转换为单个 Windows 安装程序?

我使用 eclipse、struts 2 框架和 JSP 开发了一个 java web 应用程序。它是一个 ERP 软件应用程序,我想以二进制格式将它分发给最终用户,用户可以使用安装程序安装应用程序。(请建议哪个适合)用于窗口平台。我的另一个要求是我想将所有软件与 java web 应用程序捆绑为一个单一的 windows 安装程序。提前致谢。

0 投票
1 回答
1840 浏览

c# - Deserialization of optional fields from BinaryFormatter

I have an application that serializes data using BinaryFormatter. A member was added to the class that was serialized from one version to the next without changing the class name. Code was added to handle the possible absence of the added member in old serialized files:

The point I'm at now is that I'd really like to just rinse and repeat with another member I'd like to add, which would mean I'd add another field and try-catch block similar to that for NewStuffIncludedRecently.

I had thought of just making the entire class [Serializable] but wouldn't that break compatibility with the old serialized data?

My main concern is that I'm not clear how the deserialization works. If I add in handling for another optional field similarly to above, will it work? What are other options I have for handling these changes better?

Thanks in advance as always.

0 投票
3 回答
4379 浏览

c# - memorystream 复制到网络流问题

我在这里遇到此代码的问题。

我无法弄清楚这里发生了什么,或者为什么它不起作用。似乎它没有复制,或者它关闭了网络流,或者其他什么。

对不起,我试过调试它,但如果有人能在这里看到任何明显的问题,我将不胜感激。

顺便说一句,该类可以很好地序列化,并且 MemoryStream 包含数据,但是由于某种原因,执行 ms.CopyTo(ns) 似乎不起作用?

基本上我想要做的是将类序列化为网络流,序列化数据的大小在它之前。如果有人有更好的方法来做到这一点,请告诉我!