问题标签 [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.
visual-studio - 反序列化网络流上的 system.outofmemoryexception
我有一个名为 Cereal 的可序列化类,这里显示了几个公共字段
我的客户端计算机通过序列化此处显示的新谷物向主机发送
主机监听活动流,当有东西放在上面时,它应该将其反序列化为此处显示的新 Cereal
当以下行执行时,我得到一个 System.OutOfMemoryException 并且我无法弄清楚为什么这不起作用。
该流是 TCPClient 流。我是序列化/反序列化和使用 Visual Studio 11 的新手
c# - BinaryFormatter - 是否可以在没有程序集的情况下反序列化已知类?
我目前正在尝试与在第一次使用 C# 的 BinaryFormatter 对其进行格式化后通过网络发送数据的程序进行互操作。这是一个愚蠢的想法,我讨厌它,但我必须与之互操作。
我知道类型是什么样子,我知道它的确切布局。但是由于各种原因,我无法在我的程序中添加对该特定程序集的引用。
鉴于 BinaryFormatter 与特定类型/版本的紧密耦合程度,尽管知道数据结构,我似乎无法找到一种方法让它反序列化。
我目前正在考虑创建一个具有所有正确属性的假程序集并尝试将其链接(似乎真的很混乱),或者手动尝试通过二进制流并提取我正在寻找的值(我是查看有关此的MS文档,布局一目了然)。
任何其他伟大的想法,或者过去有没有人在这方面取得成功?似乎我知道我需要的所有信息,而 BinaryFormatter 只是出了名的脆弱。
编辑:
要回答下面的问题(这是一个很好的观点,顺便说一句),有几个原因。
项目清洁度。将 5MB 引用添加到一个功能的外部 .exe 有点不对劲。
我正在与之互操作的设备在世界各地部署了各种版本。我关心的项目的内部数据结构在所有项目中都是相同的,但是程序集的版本不同,导致 BinaryFormatter 损坏。我可以将二进制流转换为字符串,搜索版本号然后加载正确的版本,但现在我有十几个 .exe 等待我加载正确的版本。那么这个方案就不是未来的证明(好吧,整个方案并不是真正的未来证明,但我至少想抽象出 BinaryFormatter 的一些脆弱性,以使我的工作更轻松)。仅仅写下这个回复就让我开始考虑使用 emit 或类似的方法来动态创建一个自定义程序集......但是伙计,必须有一个更简单的方法,对吧?我'
对象的变量通过具有某些逻辑的 get/set 属性公开,并尝试进行函数调用并更新我身边可能不存在的其他对象(也就是 get 获取我需要的值,但也会触发通知通过链接的依赖关系波动,我可以得到异常冒泡到我的应用程序。谈论代码气味!)。它变成了一个依赖/实现的兔子洞。
编辑2:制造商正在与我合作以使他们的系统更好,但是当我们宣传“与 X 一起工作”时,我们希望它只与 X 一起工作,而不需要特定版本。特别是对于我们的一些严格版本控制的客户系统,仅更新有问题的应用程序就成为一项重大工作。
.net - 奇怪的二进制格式化程序行为
我有一个带有图像数组的结构:
如果我在对象中放入两张10kb的图像,然后尝试序列化,我发现我的内存流目标有160kb。我验证了,每张图片都有~10-11kb。
我发现这真的很奇怪!如果您知道问题出在哪里,请告诉我吗?
c# - BinaryFormatter Deserialize 在反序列化 NetworkStream 时随机挂起
我试图在不掩盖真正问题区域的情况下尽可能多地省略代码。如果有人需要查看完整代码,请告诉我。
因此,我们构建了一个非常简单的 TCP 应用程序,可以减轻数据库连接,并处理来自单个节点的所有入站数据库请求。此代码处理大约 200,000 个连接(请求和响应),然后在接收请求时随机地挂在 BinaryFormatter.Deserialize 方法上。有没有人知道为什么会这样?
没有产生异常,它只是无限期地挂起。
服务器代码:
客户代码:
c# - 交替使用 BinaryFormatter 和 XmlSerializer
我继承了大量使用 BinaryFormatter 进行序列化的代码,现在我需要对其进行调试。目前所有的序列化代码都需要一个 IFormatter。
我有一个想法用 XmlSerializer 替换 BinaryFormatter,以便更轻松地检查序列化输出,但它们不兼容(没有通用基础或接口)。
是否有标准方法,例如使参数成为我的代码可以使用的某种通用序列化程序?理想情况下,我想在顶层创建我想要的任何具体序列化程序,然后将其传递下来,而较低级别不需要知道具体类型。
我目前拥有的示例:
c# - 加载文件不起作用 - GZip 标头中的幻数不正确
我正在尝试创建一个保存/加载类,该类具有保存和加载文件压缩文件的选项。以下是我到目前为止所拥有的。单步执行它似乎工作得很好,除了我得到一个“GZip 标头中的幻数不正确”异常。我不明白这是怎么回事,因为我正在检查以确保在传递它之前该数字在那里,并且我已经通过外部程序验证它是一个 GZip 文件。
任何帮助找出我出错的地方将不胜感激。总是欢迎对我的代码提出建设性的批评 - 谢谢!
c# - 反序列化跨程序集移动的类型
我有一堆类型已从一个程序集转移到另一个程序集。我正在尝试使用SerializationBinder将使用旧程序集序列化的数据反序列化为新程序集中的类型。
编辑:程序集的根命名空间与程序集名称相同。旧程序集不再存在。
反序列化代码看起来像这样 -
当我尝试反序列化时,在尝试加载旧程序集时出现错误。
无法加载文件或程序集“旧程序集”或其依赖项之一。该系统找不到指定的文件。
c# - 在c#中将字节[]转换为结构的两种方法的区别
我正在一些结构和他们的byte[]
表示之间进行一些转换。我找到了两种方法来做到这一点,但区别(性能、内存和......)对我来说并不清楚。
方法一:
方法二:
那么哪个更好,主要区别是什么?
c# - 在没有对象信息的情况下序列化对象
我处于一种情况,我只需要将对象成员的值序列化到文件中。
例如,如果对象包含 3 个字符串成员,我希望序列化的输出只有这 3 个字符串,而没有Binaryformatter添加的序列化元数据,例如对象的版本、文化和程序集名称。
一种选择是直接编写对象的每个成员,但我想避免这种情况,因为我有很多需要像这样序列化的类,我不想编写一个函数来为每个类以不同的方式处理这个问题。
要求:
我希望能够写入任何类型的文件,我希望将成员的值转换为字节(进入缓冲区或直接进入文件)并能够将这些字节写入文件中的特定位置.
有没有一种方法或 API 只序列化对象成员的值?
c# - 将对象二进制反序列化为 XML?
我在将对象反序列化为 XML 时遇到了一些麻烦。我正在尝试反序列化没有空构造函数的东西,因此我需要使用 BinaryFormatter?我有:
- 一个 DLL,它包含一个我想反序列化为 XML 的类。
- 从反映类型我可以看出它没有无参数构造函数。
- 此类包含一些属性,其中一些也没有空构造函数。
我的问题是,是否可以将此类反序列化为 XML?我确实找到了一种使用方法:
- 二进制格式化程序
- 将内容加载到流中
- 使用 FileStream 写入其内容,但以垃圾结束
提前致谢。我发现了一个叫做 FormatterServices 的东西……但不知道你是否可以将它与 XmlSerializer 结合使用?