问题标签 [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.
.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 吗?
c# - 是否有二进制序列化对象中每个属性的快捷方式?
如果有一个对象,其中每个公共属性都必须被序列化并且属性很简单(只是数字或字符串或已经实现的对象ISerializable
),是否有一种简单的方法可以做到这一点,而不必每次都创建GetObjectData(SerializationInfo info, StreamingContext context)
一个构造函数作为参数?SerializationInfo
我知道它可以通过反射手动完成,但是 .NET Framework 中是否有一种神奇的方法可以做到这一点?
所以正确答案是:
不要尝试实现 ISerializable - 它用于自定义序列化。而是在您的类声明之前添加 [Serializable] 属性。
nservicebus - 使用二进制序列化器在 NServiceBus 中将接口作为消息发送
我最近开始使用二进制序列化程序通过 NServiceBus 发送消息。我的消息都定义为接口并使用实例化
这会导致 NServiceBus 抛出异常,说明
无法创建接口的实例
我可以从堆栈跟踪中看到正在使用 SimpleMessageMapper,在查看源代码后可以看到它正在调用 Activator.CreateInstance。
我在文档中找不到任何说明无法做我想做的事情的东西,有没有办法解决这个问题?
谢谢,马特
c - c 和缓冲区中的多态性
我有这个工会:
message_with_parameters
将 amessage_base
作为第一个字段,reply_message
将 amessage_with_parameters
作为第一个字段,然后将 a 作为message_base
第一个字段。
所以基本上我可以访问它们中的任何一个,我仍然会得到我需要的所有数据,但是我从我的驱动程序获得一个缓冲区,现在我想将它序列化到消息中。
我已经知道指向缓冲区的指针是错误的,因为它与我的结构无关,但我不能拥有固定大小的缓冲区。
在某个地方我想这样做:
而且无论我有什么样的数据类型,它仍然会序列化。
如何做呢?
编辑:
这是我的结构:
c# - BinaryFormatter.Deserialize 如何创建新对象?
当BinaryFormatter
将流反序列化为对象时,它似乎是在不调用构造函数的情况下创建新对象。
它是如何做到的?为什么?.NET 中还有其他东西可以做到这一点吗?
这是一个演示:
输出:
Cars constructed: 1
But there are actually two.
.net - 二进制序列化,在类中添加一个新字段——它会起作用吗?
我有一个客户端和一个服务器应用程序,它们使用二进制序列化通过 .NET 2.0 Remoting 进行通信。
对数据传输对象的接口和实现类之一进行了小的更改,添加了一个字符串数组字段。
如果我重新部署新版本的服务器应用程序,我的旧客户端会继续工作吗?
我认为他们会,因为没有从接口和直接实现中删除任何内容,但我不确定。
它可能归结为另一个问题 - 二进制反序列化器是否“足够聪明”通过将无法在输入二进制流中找到数据的字段初始化为 null 来处理这种情况,或者它会中断并抛出异常?
c# - 条件 C# 二进制序列化
我正在使用 BinaryFormatter 按条件序列化一个类及其变量。例如:
我希望变量 B 仅在远程处理时被序列化,而不是在我将其序列化到文件存储时。问题:
1)我知道在 XmlSerialization 中我们可以使用 [XmlIgnore] 和 {PropertyName} 指定有条件地忽略该属性。这是 [NonSerialized] 的等效方法吗?
2) 对于具有 [Serializable] 属性的类,如何在运行时忽略它?
c# - 尝试反序列化时出现“无法找到程序集”,从客户端到服务器,但不是其他方式
我已经阅读了很多关于这个主题的类似问题和答案,但仍然不确定我为什么会遇到这个问题。
我有一个客户端和服务器项目,它们都使用我创建的同一个 dll 库。当我在客户端序列化一个对象时,我在服务器上反序列化它没有问题,但是当我在服务器序列化它之后尝试在客户端反序列化它时,它会引发“无法找到程序集”异常。
客户端和服务器上的序列化和反序列化代码是相同的,它们都知道并使用相同的 dll,有什么想法可能导致问题吗?
delphi - 二进制序列化文件 - Delphi
我正在尝试反序列化在 Delphi 中序列化的旧文件格式,它使用二进制序列化。除了其中的一些非常高级的记录外,我对文件的结构一无所知。
你会采取什么步骤来解决这个问题?有什么工具之类的吗?
.net - 可序列化属性 .NET
我在 .NET 中使用二进制序列化来克隆对象。我必须用属性标记我自己的任何类<Serializable()>
,以便序列化程序处理该类。然而,由于这是一个将用于任何对象的函数,我想知道:
即使没有用<Serializable()>
属性标记,是否可以让序列化程序序列化对象?如果没有,有没有办法将属性“自动应用”到任何类?
编辑。我主要担心的是我需要能够克隆 .NET Framework 中已经存在的 POCO 对象。所有这些都已经可以序列化了吗?