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

.net - .NET 中序列化对象的大多数当前实现方法(从 v4.0 开始)

我有一个简单的自定义对象,称为MyObject(几个基本属性和一个List(of MyObject),所以它是递归的),我需要对其进行序列化以进行存储。我不确定我是否会序列化为 XML 或二进制,但我想确保我正在使用最新的方法来执行此操作,因为涉及到一些不同的命名空间,我可能会遗漏了什么。

  • 要执行 XML,我会使用System.Xml.Serialization.XmlSerializer
  • 做二进制,我会用System.Runtime.Serialization.Formatters.Binary.BinaryFormatter

还有一个System.Runtime.Serialization.Formatters.Soap.SoapFormatter,但 MSDN 声称它已贬值以支持 BinaryFormatter。我本来希望所有东西都在上面的第二个命名空间中——我应该使用更新版本的 XmlSerializer 吗?

0 投票
1 回答
418 浏览

c# - 是否有二进制序列化对象中每个属性的快捷方式?

如果有一个对象,其中每个公共属性都必须被序列化并且属性很简单(只是数字或字符串或已经实现的对象ISerializable),是否有一种简单的方法可以做到这一点,而不必每次都创建GetObjectData(SerializationInfo info, StreamingContext context)一个构造函数作为参数?SerializationInfo

我知道它可以通过反射手动完成,但是 .NET Framework 中是否有一种神奇的方法可以做到这一点?


所以正确答案是:

不要尝试实现 ISerializable - 它用于自定义序列化。而是在您的类声明之前添加 [Serializable] 属性。

0 投票
1 回答
943 浏览

nservicebus - 使用二进制序列化器在 NServiceBus 中将接口作为消息发送

我最近开始使用二进制序列化程序通过 NServiceBus 发送消息。我的消息都定义为接口并使用实例化

这会导致 NServiceBus 抛出异常,说明

无法创建接口的实例

我可以从堆栈跟踪中看到正在使用 SimpleMessageMapper,在查看源代码后可以看到它正在调用 Activator.CreateInstance。

我在文档中找不到任何说明无法做我想做的事情的东西,有没有办法解决这个问题?

谢谢,马特

0 投票
1 回答
176 浏览

c - c 和缓冲区中的多态性

我有这个工会:

message_with_parameters将 amessage_base作为第一个字段,reply_message将 amessage_with_parameters作为第一个字段,然后将 a 作为message_base第一个字段。
所以基本上我可以访问它们中的任何一个,我仍然会得到我需要的所有数据,但是我从我的驱动程序获得一个缓冲区,现在我想将它序列化到消息中。
我已经知道指向缓冲区的指针是错误的,因为它与我的结构无关,但我不能拥有固定大小的缓冲区。
在某个地方我想这样做:

而且无论我有什么样的数据类型,它仍然会序列化。
如何做呢?

编辑:
这是我的结构:

0 投票
3 回答
13517 浏览

c# - BinaryFormatter.Deserialize 如何创建新对象?

BinaryFormatter将流反序列化为对象时,它似乎是在不调用构造函数的情况下创建新对象。

它是如何做到的?为什么?.NET 中还有其他东西可以做到这一点吗?

这是一个演示:

输出:

Cars constructed: 1
But there are actually two.

0 投票
2 回答
1987 浏览

.net - 二进制序列化,在类中添加一个新字段——它会起作用吗?

我有一个客户端和一个服务器应用程序,它们使用二进制序列化通过 .NET 2.0 Remoting 进行通信。

对数据传输对象的接口和实现类之一进行了小的更改,添加了一个字符串数组字段。

如果我重新部署新版本的服务器应用程序,我的旧客户端会继续工作吗?

我认为他们会,因为没有从接口和直接实现中删除任何内容,但我不确定。

它可能归结为另一个问题 - 二进制反序列化器是否“足够聪明”通过将无法在输入二进制流中找到数据的字段初始化为 null 来处理这种情况,或者它会中断并抛出异常?

0 投票
3 回答
1517 浏览

c# - 条件 C# 二进制序列化

我正在使用 BinaryFormatter 按条件序列化一个类及其变量。例如:

我希望变量 B 仅在远程处理时被序列化,而不是在我将其序列化到文件存储时。问题:
1)我知道在 XmlSerialization 中我们可以使用 [XmlIgnore] 和 {PropertyName} 指定有条件地忽略该属性。这是 [NonSerialized] 的等效方法吗?
2) 对于具有 [Serializable] 属性的类,如何在运行时忽略它?

0 投票
2 回答
379 浏览

c# - 尝试反序列化时出现“无法找到程序集”,从客户端到服务器,但不是其他方式

我已经阅读了很多关于这个主题的类似问题和答案,但仍然不确定我为什么会遇到这个问题。

我有一个客户端和服务器项目,它们都使用我创建的同一个 dll 库。当我在客户端序列化一个对象时,我在服务器上反序列化它没有问题,但是当我在服务器序列化它之后尝试在客户端反序列化它时,它会引发“无法找到程序集”异常。

客户端和服务器上的序列化和反序列化代码是相同的,它们都知道并使用相同的 dll,有什么想法可能导致问题吗?

0 投票
3 回答
788 浏览

delphi - 二进制序列化文件 - Delphi

我正在尝试反序列化在 Delphi 中序列化的旧文件格式,它使用二进制序列化。除了其中的一些非常高级的记录外,我对文件的结构一无所知。

你会采取什么步骤来解决这个问题?有什么工具之类的吗?

0 投票
5 回答
950 浏览

.net - 可序列化属性 .NET

我在 .NET 中使用二进制序列化来克隆对象。我必须用属性标记我自己的任何类<Serializable()>,以便序列化程序处理该类。然而,由于这是一个将用于任何对象的函数,我想知道:

即使没有用<Serializable()>属性标记,是否可以让序列化程序序列化对象?如果没有,有没有办法将属性“自动应用”到任何类?

编辑。我主要担心的是我需要能够克隆 .NET Framework 中已经存在的 POCO 对象。所有这些都已经可以序列化了吗?