将对象反序列化为现已签名和版本控制的程序集

2023-11-28

我曾经使用 BinaryFormatter (c#) 序列化树视图。执行此操作并包含所有可序列化类的程序集现在具有强名称并已签名,并且还获得了新的版本号(但是,实现没有改变)。

当我尝试反序列化 byte[] 数组时,该行

(TreeViewData)binaryFormatter.Deserialize(memoryStream);

产生 ArgumentNullException。 (参数名称:类型)

我认为版本号是问题,所以我实现了一个自己的Binder。我重写了 BindToType 方法,并确保版本已更正并返回正确的类型。

然而,就在程序离开 BindToType 方法的那一刻,我仍然得到上面提到的异常。

我该如何解决?


您可以使用SerializationBinder解决这个问题:

private class WeakToStrongNameUpgradeBinder : SerializationBinder
{
    public override Type BindToType(string assemblyName, string typeName)
    {
        try 
        {
            //Get the name of the assembly, ignoring versions and public keys.
            string shortAssemblyName = assemblyName.Split(',')[0];
            var assembly = Assembly.Load(shortAssemblyName);
            var type = assembly.GetType(typeName);
            return type;
        }
        catch (Exception)
        {
            //Revert to default binding behaviour.
            return null;
        }
    }
}

Then

var formatter = new BinaryFormatter();
formatter.Binder = new WeakToStrongNameUpgradeBinder();

瞧,您的旧序列化对象可以使用此格式化程序反序列化。如果类型也发生了变化,您可以使用SerializationSurrogate将旧类型反序列化为新类型。

正如其他人提到的,进行自己的序列化而不是依赖IFormatter是一个好主意,因为您可以更好地控制版本控制和序列化大小。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

将对象反序列化为现已签名和版本控制的程序集 的相关文章

  • 将文本叠加在图像背景上并转换为 PDF

    使用 NET 我想以编程方式创建一个 PDF 它仅包含一个背景图像 其上有两个具有不同字体和位置的标签 我已阅读过有关现有 PDF 库的信息 但不知道 如果适用 哪一个对于如此简单的任务来说最简单 有人愿意指导我吗 P D 我不想使用生成的
  • 恢复上传文件控制

    我确实阅读了以下帖子 C 暂停 恢复上传 https stackoverflow com questions 1048330 pause resume upload in c 使用 HTTP 恢复上传 https stackoverflow
  • 将下一个参数作为 String.Format 中的字段宽度

    在 C 中 我有一个想要用于某些字符串的宽度 但直到运行时我才知道该宽度 我正在做这样的事情 string Format 0 digits value prints 123 as 123 是否有一个字符串格式化指令可以让我指定它 而无需像这
  • ThreadPool.SetMinThreads 不创建任何新线程

    我想弄清楚到底有什么影响ThreadPool SetMinThreads makes 根据官方文档 https learn microsoft com en us dotnet api system threading threadpool
  • 是否有 .NET 库或 API 可以与 IIS 配置数据库交互/编辑它?

    或者我是否坚持使用自己的 XML 切割 功能 我想创建一个小型任务托盘应用程序 以便我可以快速将虚拟目录重新指向硬盘上的几个文件夹之一 一点背景 我的开发机器上的代码库有 3 个不同的 svn 分支 Current Production B
  • .net 中的 deflate、gzip 和 zlib 的一个库

    首先 我们来定义一些容易混淆的术语 deflate compression algorithm zlib header deflate trailer gzip header deflate trailer 我正在寻找一个基本上可以让我执行
  • 何时使用 Windows Workflow Foundation? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 有些事情仅通过手动 代码 更容易实现 但有些事情通过 WF 更容易实现 看起来 WF 可以用来创建 几乎 任何类型的算法 所以 理论上 我可以在
  • 如何使用 NGEN 二进制文件安装 IronPython 2.0?

    有谁知道如何使用 MSI 包安装带有 NGEN 二进制文件的 IronPython 2 0 这IronPython 官方主页 http www codeplex com IronPython据说NGEN选项将大大改善启动时间 但由于某种原因
  • 为什么可以通过ref参数修改readonly字段?

    考虑 class Foo private readonly string value public Foo Bar ref value private void Bar ref string value value hello world
  • 在mysql连接字符串中添加应用程序名称/程序名称[关闭]

    Closed 这个问题需要细节或清晰度 help closed questions 目前不接受答案 我正在寻找一种解决方案 在连接字符串中添加应用程序名称或程序名称 以便它在 MySQL Workbench 中的 客户端连接 下可见 SQL
  • 等待 IAsyncResult 函数直至完成

    我需要创建等待 IAsyncResult 方法完成的机制 我怎样才能做到这一点 IAsyncResult result contactGroupServices BeginDeleteContact contactToRemove Uri
  • MongoDb 注册类映射

    我有以下代码 我希望 MiscellaneousData 覆盖抽象的 MiscellaneousDataBase 然而 IdMemberMap 总是出现空值 使用独立的 正常 类是可行的 if BsonClassMap IsClassMap
  • .NET 标准与 .NET 核心

    我已经了解了 NET Standard 和 NET Core 之间的区别 但我真的不知道区别是什么 或者何时选择 NET Standard 库项目以及何时选择 NET Core 库项目 我读到 NET Standard 是为了确保一组 AP
  • 在 C# 中将 ANSI (Windows 1252) 转换为 UTF8

    I ve 之前问过这个 https stackoverflow com q 4351985 398713之前在 Stack Overflow 上以一种迂回的方式 这次想把它做好 如何将 ANSI 代码页 1252 转换为 UTF 8 同时保
  • 具有子列表属性映射问题的自动映射器

    我有以下型号 Models public class Dish Required public Int64 ID get set Required public string Name get set Required public str
  • 任务并行库周围是否有一个接口包装器,以便我可以将其交换用于单元测试?

    I asked 这个问题 https stackoverflow com questions 3362734 unit testing concurrent software what do you do不久以前 我现在知道这是一个坏主意
  • C#动态支持吗?

    看完之后这个帖子 https stackoverflow com questions 2674906 when should one use dynamic keyword in c sharp 4 0k和链接 我还有 2 个问题 问题 1
  • 如何创建可以像 UserControl 一样编辑的 TabPage 子类?

    我想创建一个包含一些控件的 TabPage 子类 并且我想通过设计器来控制这些控件的布局和属性 但是 如果我在设计器中打开子类 我将无法像在 UserControl 上那样定位它们 我不想创建一个带有 UserControl 实例的 Tab
  • Hibernate 和可序列化实体

    有谁知道是否有一个框架能够从实体类中剥离 Hibernate 集合以使它们可序列化 我查看了 BeanLib 但它似乎只进行实体的深层复制 而不允许我为实体类中的集合类型指定实现映射 BeanLib 目前不适用于 Hibernate 3 5
  • 是否可以有一个 out ParameterExpression?

    我想定义一个 Lambda 表达式out范围 有可能做到吗 下面是我尝试过的 C Net 4 0 控制台应用程序的代码片段 正如您在 procedure25 中看到的 我可以使用 lambda 表达式来定义具有输出参数的委托 但是 当我想使

随机推荐

  • 在 Three.js 中根据对象的旋转来移动对象

    我正在尝试根据其旋转在 Three js 中移动立方体 但不确定如何进行 到目前为止 我可以使用 A 和 D 键来旋转立方体的 z 轴 使用 W 键我希望它相对于其旋转向前移动 从 2D 来看 我会这样 float angle GradTo
  • iOS 11 使用大标题时滚动到顶部无法正常工作

    使用大标题并点击状态栏滚动到标题顶部时UIScrollView or UITableView 可能也UICollectionView 还没有测试过这个 它总是有点太过分了 我已启用刷新TableView当点击状态栏时 它会显示为这样 并保持
  • 和 <%@ include file=...> 有什么区别? [复制]

    这个问题在这里已经有答案了 这两个标签都包含一个页面中另一页面的内容 那么什么是精确差异在这两个标签之间 在一段可重用的代码中 我使用指示 在第二个我使用标准动作
  • React,如何从父级访问子级的状态?无需更新父级的状态

    大家好 我对 React 还很陌生 并且很难理解整个状态管理以及通过状态和 props 传递数据 我确实理解标准的反应方式是以单向方式传递数据 从父级到子级 我已经对所有其他组件这样做了 但我有一个名为 Book 的组件 它根据用户选择形式
  • “any”类型的参数不可分配给“never”类型

    我正在从端点获取图像 但无法将每个映射文件推送到本地数组中 我收到错误Argument of type any is not assignable to type never 我尝试将所有参数设置为blob没有成功 尝试设置function
  • HTML 表格中的自动换行

    我一直在使用word wrap break word将文本换行divs and spans 但是 它似乎不适用于表格单元格 我有一张桌子width 100 一行两列 列中的文本 尽管样式与上述相同word wrap 不换行 它会导致文本超出
  • ScrollViewer 使用 DataGrid 时性能缓慢

    我有以下场景
  • iOS 5.0 中的 Core Image 滤镜对于实时视频处理来说足够快吗?

    现在 Apple 已将 Core Image 框架移植到 iOS 5 0 我想知道 Core Image 是否足够快 可以将实时滤镜和效果应用于相机视频 另外 学习 iOS 5 0 的 Core Image 框架的一个好的起点是什么 现在
  • 属性与函数(特别是.NET)

    我读过一些关于这个主题的讨论 但有一些我不明白的地方 最常见的答案似乎是这样的 使用 ReadOnly 属性返回缓存数据 使用 Function 返回非缓存数据 根本不要使用 WriteOnly 属性 因为 它没有意义 这没有性能原因 在伊
  • PHP 为每个页面添加导航栏技术?

    我正在尝试通过包含文件来合并每个页面的代码来清理我的 php 网页中的代码 如下所示 文件 head php 文件 页脚 php
  • 节点js SMTP错误

    我正在通过我的 godaddy 电子邮件帐户发送电子邮件 为此 我使用 Node js 发送电子邮件 但它给出以下错误 Error getaddrinfo ENOTFOUND code ENOTFOUND errno ENOTFOUND s
  • 如何使用节标题调整 UITableViewController 中 UITableView 的大小

    我在 UITableViewController 中有一个分组的 UITableView 我想水平调整它的大小 我尝试了很多不同的方法 但没有一个是完美的 我尝试过的 1 覆盖 UITableView setFrame 但它没有移动各部分的
  • 保持数据库连接打开的成本是否昂贵?

    我正在与一些软件开发人员开会 他们建议我在我的应用程序代码中尽快关闭数据库连接 有人可以告诉我在应用程序中保持连接打开有什么危害吗 我正在从数据库的单个表中读取数据 把它想象成公共汽车上的座位 当您打开连接时 您会填满这些座位 最终 公共汽
  • 如何在 Google App Engine 启动器启动时禁用自动检查更新?

    我一直在研究 GAE 并且喜欢 Windows SDK 提供的 GAE 启动器的易用性 我的问题是 当我启动应用程序时 它需要很长时间才能响应 这是因为程序在启动应用程序之前首先检查更新 这会导致它在等待响应时挂起 我的问题是我的主要开发计
  • Java - SimpleDateFormat 解析 12:19:00 到 00:19:00

    我正在尝试解析迄今为止的字符串 但输出看起来不正确 下面是我的代码 public static void main String args Date startDate new Date DateFormat formatter new S
  • 如何从 base64 数据 URI 在服务器端保存 PNG 图像

    我正在使用 Nihilogic 的 Canvas2Image JavaScript 工具将画布绘图转换为 PNG 图像 我现在需要的是使用 PHP 将此工具生成的这些 base64 字符串转换为服务器上的实际 PNG 文件 简而言之 我目前
  • mysql ...in where 子句不明确

    SELECT cat CategoryID as CategoryID count p ProductID as CountProducts FROM Category as cat LEFT JOIN Products as p on p
  • WordPress如何使用jquery和$符号

    我在 WordPress 插件中有一个简单的 jQuery 脚本 它使用如下 jQuery 包装器 document ready function jQuery code is in here 我从 WordPress 仪表板中调用此脚本
  • 我可以在 Google Cloud Function 中访问 GraphicsMagick for ImageMagick 吗?

    我想制作一个 Google Cloud Function 来正确设置上传文件的内容类型 我知道如何使用 GraphicsMagick 或 ImageMagick 执行此操作 但我不确定 Google Cloud Function 是否具有这
  • 将对象反序列化为现已签名和版本控制的程序集

    我曾经使用 BinaryFormatter c 序列化树视图 执行此操作并包含所有可序列化类的程序集现在具有强名称并已签名 并且还获得了新的版本号 但是 实现没有改变 当我尝试反序列化 byte 数组时 该行 TreeViewData bi