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

c# - 反序列化通用列表返回 null

我正在反序列化一个对象,如下所示:

列表中的对象确实具有 Serializable 属性。序列化时,不会抛出任何错误并且列表永远不会为空,但是在反序列化时我的所有列表都是空的,我不知道为什么。

我将此标记为 CQ 已回答。我能够生成一个小型的一次性测试应用程序,它可以正确序列化/反序列化我正在尝试使用的对象,但我似乎仍然无法让它在我的生产代码中工作,但我怀疑这是我的小事我失踪了。

0 投票
5 回答
34840 浏览

c# - XmlSerializer 和 BinaryFormatter 有什么区别

上周我花了很多时间在序列化上。在那段时间里,我发现了许多使用 BinaryFormatter 或 XmlSerializer 的示例。不幸的是,我没有找到任何全面详细说明两者之间差异的示例。

我好奇的根源在于为什么 BinaryFormatter 能够直接反序列化为接口,而 XmlSerializer 则不能。Jon Skeet在对“在运行时转换为多个(未知类型) ”的回答中提供了一个直接二进制序列化到接口的示例。Stan R.在他对“ XML Object Deserialization to Interface ”的回答中为我提供了使用 XmlSerializer 实现目标的方法。

除了 BinaryFormatter 使用二进制序列化而 XmlSerializer 使用 XML 之外,我想更全面地了解根本区别。何时使用其中一种以及每种的优缺点。

0 投票
4 回答
800 浏览

c# - 如何反序列化已更改类型的旧数据?

我有使用二进制序列化为以下类存储的数据:

在某些时候,课程更改为:

这会导致反序列化旧数据的问题。

我的第一个想法是实现ISerializable,但是这个类有许多属性以及数百个继承类,我也必须实现它。

我想在反序列化期间更改旧数据以匹配当前结构,或者有一种干净的方式来升级旧数据。

0 投票
4 回答
36170 浏览

c# - 将 byte[] 数组转换为 DataTable

我将 DataTable 类型的对象保存到 SQL 2005 数据库中 varbinary 类型的字段中。我想找回它,但我无法输入它。这就是我保存它的方式。

'dt' 是 DataTable 对象实例。

0 投票
2 回答
4247 浏览

c# - 使用 .NET 自定义序列化时测试可选字段

给定一个像这样的类:

如何address在调用之前测试该字段的值是否存在info.GetString(address)

是的,我明白我可以简单地写一个空address字段,但我真正的问题是早期版本的MyClass, 没有地址字段。

注意:我有充分的理由使用自定义序列化。有一些静态字段被用作单例,默认反序列化不会尊重这一点。

0 投票
1 回答
819 浏览

c# - 是否存在可二进制序列化的 XML 特定对象(如 XElement)?

我有一个用例,我通过 MSMQ(主要是字符串)通过网络对对象进行序列化。当我从队列中读取对象时,我希望能够判断用户是否希望该对象是 XML 或字符串。我在想一个好方法就是检查类型。如果它是 XmlElement,则它变成 XML 数据,否则它变成字符串或 CDATA。我不想只检查数据是否为有效 XML 的原因是,有时会提供应该序列化为字符串但实际上是有效 XML 的数据。我希望调用者能够控制反序列化为字符串或 XML。

.NET Framework 中是否有任何类型标记为可序列化,例如 XElement 或 XmlElement(两者均未标记为可序列化)?

0 投票
3 回答
7745 浏览

c# - 如何忽略二进制序列化的事件类成员?

我需要避免序列化 Event 类成员,因为当事件由未标记为 Serializable 的对象处理时,序列化将失败。

我尝试在 Event 类成员上使用 NonSerialized 属性,但编译失败。这行代码:

产生以下错误:

属性“NonSerializedAttribute”不能应用于“PropertyValueChanged”,因为该属性在此声明类型上无效。

还有其他方法可以避免序列化 Event 成员吗?

如果未处理事件,这不是问题,我可以通过在序列化对象之前克隆对象(并忽略事件)来解决它。只是想知道是否有更好的方法。

谢谢。

0 投票
2 回答
5269 浏览

c# - 为什么不能在类级别使用“NonSerialized”属性?如何防止类的序列化?

我有一个使用二进制序列化深度克隆的数据对象。此数据对象支持属性更改事件,例如 PriceChanged。

假设我将一个处理程序附加到 PriceChanged。当代码尝试序列化 PriceChanged 时,它会引发处理程序未标记为可序列化的异常。

我的替代方案:

  • 在序列化之前,我无法轻松地从事件中删除所有处理程序
  • 我不想将处理程序标记为可序列化,因为我还必须递归地标记所有处理程序依赖项。
  • 我不想将 PriceChanged 标记为 NonSerialized - 有数十个这样的事件可能有处理程序。编辑:我不能这样做的另一个原因是因为生成了数据类(以及事件),并且我无法直接控制生成代码。理想情况下,生成代码只会将所有事件标记为 NonSerialized。
  • 理想情况下,我希望 .NET 在该点停止向下对象图并使其成为“叶子”。那么,为什么.NET 不允许将整个类标记为 NonSerialized?

--

我最终通过使处理程序实现 ISerializable 并且在序列化构造函数/ GetDataObject 方法中什么都不做来解决这个问题。但是,处理程序仍然是序列化的,只是它的所有依赖项都设置为 null - 所以我也必须考虑到这一点。

有没有更好的方法来防止整个类的序列化?也就是说,不需要考虑空依赖项?

0 投票
2 回答
861 浏览

asp.net - 如何优化视图状态的类

如果我有一个需要存储在视图状态中的对象,我可以做哪些事情来优化存储对象所需的大小?显然,存储最少的数据将占用更少的空间,但除此之外,有没有办法构建类、属性、属性等,这会影响序列化输出的大小?

0 投票
4 回答
18176 浏览

c# - 如何分析二进制序列化流的内容?

我使用二进制序列化(BinaryFormatter)作为一种临时机制,将状态信息存储在文件中,用于相对复杂的(游戏)对象结构;这些文件比我预期的要大得多,而且我的数据结构包括递归引用 - 所以我想知道 BinaryFormatter 是否实际上存储了相同对象的多个副本,或者我的基本“对象和值的数量我应该有“算术太离谱了,或者过大的大小是从哪里来的。

搜索堆栈溢出我能够找到微软二进制远程格式的规范:http: //msdn.microsoft.com/en-us/library/cc236844 (PROT.10).aspx

我找不到任何现有的查看器,使您能够“窥视”二进制格式化程序输出文件的内容 - 获取文件中不同对象类型的对象计数和总字节数等;

我觉得这一定是我的“google-fu”让我失望了(我所拥有的很少)——有人能帮忙吗?这一定是以前做过的吧??


更新:我找不到它并且没有得到答案,所以我把一些相对较快的东西放在一起(链接到下面的可下载项目);我可以确认 BinaryFormatter 不存储同一个对象的多个副本,但它确实将大量元数据打印到流中。如果您需要高效的存储,请构建您自己的自定义序列化方法。