问题标签 [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 回答
2301 浏览

c# - 从序列化文件中删除记录?

我正在打开一个存储了我所有记录的序列化文件。该代码在当前记录的对象 ID 编号属性和相应文本框中的编号之间查找匹配项。如果有匹配项,我想删除记录。最好的方法?

0 投票
1 回答
953 浏览

c# - 是什么导致使用 BinaryFormatter 序列化的对象发生对象版本更改?

根据这个问题,我有一个要序列化的对象BinaryFormatter。由于各种原因,我们实现了一个像这样的穷人版本处理,在底部有一个 try-catch 块,用于新版本中但旧版本中没有的字段:

我逐步浏览了我机器上的代码,这似乎有效。当我读取一个旧的序列化对象时,最里面的 try-catch 会按照我的要求处理丢失的部分。

当我去同事的机器上尝试读取对象的旧版本时,顶部的第一个 Deserialize() 调用会引发 SerializationException:

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

因此我的问题是:是什么导致对象的版本发生变化?当我在对象的两个版本之间(注释/取消注释新字段)在我的盒子上来回移动时,没有问题,但是在另一个人的盒子上,第一个 Deserialize() 炸弹。我什至不确定从哪里开始寻找,尽管我确实尝试使版本检查更宽松,如下所示:

0 投票
2 回答
483 浏览

.net - 奇怪的反序列化错误,子对象没有完全反序列化

我刚刚注意到二进制序列化中有一个奇怪的行为:当我在我的类中反序列化一个字典并尝试立即向它添加一些东西时,我收到一个错误,因为它没有完全初始化:

在我将数据添加到字典的那一行,我得到一个NullReferenceException,但该Dict属性不为空:它已实例化,但未初始化(其所有字段均为 0 或空)。我怀疑它只是用创建的FormatterServices.GetUninitializedObject,但实际上还没有反序列化。

我知道在这一点上,也许它不应该被完全初始化。所以我尝试了另一种方法,通过实现IDeserializationCallback接口。MSDN 说:

实现当前接口作为对对象图反序列化完成时调用的方法的支持的一部分。

如果一个对象需要对其子对象执行代码,可以延迟这个动作,实现IDeserializationCallback,只有在这个接口被回调时才执行代码

所以它似乎正是我所需要的,我希望我的字典在OnDeserialization被调用时被完全初始化......但我得到了同样的错误!

由于IDeserializationCallback设计用于在子对象上执行代码,我希望此时子对象完全初始化。请注意,如果我OnDeserialize在字典上手动调用,它工作正常,但不知何故我认为我不应该这样做......

这种行为正常吗?谁能解释这里发生了什么?

0 投票
1 回答
2697 浏览

silverlight - Silverlight 中的二进制格式化程序

我正在构建用于 Silverlight 应用程序的 WCF RIA 服务。我正在使用 BinaryFormatter.Serialize() 将我的数据序列化为二进制数组,然后再发送回客户端(银灯)。

但是,Silverlight 4 还不支持 BinaryFormatter,您能否建议如何将字节数组反序列化回客户端的对象,就像 BinaryFormatter.Deserialize() 在服务端所做的那样。

谢谢

0 投票
1 回答
190 浏览

tsql - @@DBTS 和 BInaryFormatter

我编写了一个客户端,它使用 SyncFramework 来协调中心辐射型架构仓储应用程序中的数据整合。当同步事务处理时,同步框架使用 @@DBTS 的值更新指定的锚表,指示上次同步处理并上传到服务器的时间。作为此方案的一部分,我想提供允许一个客户端代表其他客户端中继数据的能力。

这将用于一个客户可能无法与仓库联系的情况;它的数据库可以由有权访问仓库的客户端检索和同步(作为 DVD 或 USB 闪存介质上的数据库备份进行交换)。

该理论的问题在于,在检索快照时,如果没有在客户端数据库上设置 SentAnchor,则下次执行此过程时,会第二次复制整个数据库。

我想做的是,当我抓取客户端数据库的快照时,更新它的 SentAnchor,这样下次我抓取副本时,同步框架就会知道它的 SentAnchor ,就好像它实际上已经与服务器通信一样。

所以我的第一个冲动是简单地更新锚表,将 SentAnchor 设置为@@DBTS,但问题是同步框架以不同的格式插入相同的值,它首先通过 BinaryFormatter 运行它。

因此,相同的内在价值,不同的标头,当我尝试使用 @@DBTS 的值进行更新时,SyncFramework 错误试图将其从它预期设置的格式转换回来。

我想做的是通过 TSQL 语句设置,与同步框架使用的 @@DBTS 格式相同;我不想编写应用程序来执行单个 SQL 语句,如果这可以在已执行的语句中完成以创建备份。

就像是...

基本上用任何需要的东西替换上面的@@DBTS,以便将相同的值转换为 SyncFramework 将使用的正确 fromat。

服务器是 2008R2 Express。

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始终使用构造函数,我相信我的问题会得到解决。

0 投票
1 回答
152 浏览

c# - 如何序列化 CustomLineCap 类的实例

CustomLineCap 没有SerializableAttribute应用它。

我想将这种类型的属性添加到当前正在使用BinaryFormatter.

我尝试切换到 XML 序列化,但它有很多额外的要求,我不想被那个 esp 愚弄。因为这不是我的代码;这是我下载的一些开源软件。

如果有办法BinaryFormatter忽略该属性,那可能会起作用。

我宁愿子类化它;我只是不知道这是否会奏效。

0 投票
1 回答
2443 浏览

c# - 将类型序列化为字典

我正在尝试序列Dictionary<int, int>化为Dictionary<string, string>.

所以我创建了如下Test2类型:Dictionary<int, int>

并使用以下代码测试序列化:

由于某种原因,克隆不包含任何数据(Count eq 为 0)。

更新:

“int”和“string”在这里仅用于测试。在实际应用程序中,我使用主键而不是字符串和大对象而不是 int 之类的东西,并且序列化数组包含它们之间的关系。通过减少不相关的代码并用上面的示例替换我最终得到的类型。

我只能使用 .NET 框架功能。

0 投票
2 回答
2195 浏览

c# - BinaryFormatter.Deserialize HeaderHandler 捕获返回值

我正在使用BinaryFormatter.Deserialize(Stream, HeaderHandler).我可能在这里遗漏了一些明显的东西,但我在网上找不到任何例子,所以我希望有人能有所启发。我已经传入了返回对象的委托 HeaderHandler,但我不知道如何获取它返回的对象?

0 投票
2 回答
125 浏览

c# - 无法获取要反序列化的课程列表

看来我得从头开始了