问题标签 [serializationbinder]

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 回答
1135 浏览

c# - 反序列化使用不同版本的签名程序集编写的泛型的最佳方法是什么?

在其他情况下,建议您简单地添加一个从程序集类型中删除版本的 SerializationBinder。但是,当使用在已签名程序集中找到的类型的泛型集合时,该类型将严格根据其程序集进行版本控制。

这是我发现的作品。

但是,导致绑定过程全局更改对我来说似乎相当危险。如果序列化发生在多个线程中,可能会发生奇怪的事情。也许更好的解决方案是对 typeName 进行一些正则表达式操作?

编辑: 基于字符串的方法不起作用。泛型显然需要一个完整的强命名类型。如果你问我,那就太令人发指了。

0 投票
1 回答
311 浏览

c# - 自定义类型和序列化列表的问题

我们正在努力发布我们其中一款产品的 2.0 版,并且我们希望保持与 1.0 版客户已安装基础的文件兼容性。我一直在我们应用程序中的大多数类型上实现 ISerializable,但似乎遇到了障碍。

我有一个类型,为了讨论,我们称它为 Family

这是作为 1.0 版本发布的,在 2.0 中,我们将 Name 类更改为 Person,这实际上是相同的,但构造函数略有不同,而且名称显然不同。

这显然不起作用,“名称”类型不再在程序集中,所以我添加了一个 SerializationBinder 来解决这个问题:

这主要是有效的,当我反序列化对象时,绑定器被调用,返回正确的类型,但是 Person 上的反序列化构造函数永远不会被调用。没有抛出异常,有人有什么想法吗?

0 投票
1 回答
2036 浏览

c# - "System.Collections.Generic.List`1" SerializationBinder BindToType

我有一个 Web 服务,它将以下内容作为字节数组序列化并返回给客户端:

也就是说,我将List(Of MyFile)返回给客户端。

它由具有以下 TYPENAME 的客户端使用

程序集名称为:

我正在使用以下两个类来绑定反序列化:

但是对于我的一生,并尝试了 GETTYPE 语句的许多变体,我的 TYPE 始终为 NULL。

例如,根据 STACKOVERFLOW 上的帖子,我尝试过:

但它没有用:(

0 投票
1 回答
736 浏览

c# - 无法反序列化惰性对象

我想序列化和反序列化一个包含Lazy Collection一些自定义对象的对象。

通常一切正常,但是如果用于序列化的类的名称空间发生更改,则会出现此问题。

SerializationBinder在反序列化时写了一个指向正确的类。但由于某种原因,我没有得到反序列化的值。

以下代码片段解释了我遇到的问题;

用于序列化的类:

以上相同的类用于反序列化,但只有命名空间更改为ConsoleApplication14.OtherNamespace

为了使这种反序列化起作用,我使用了以下SerializationBinder类:

对象的序列化和反序列化MyCustomClass

当调用反序列化 Lazy 对象的属性NullReferenceException时,我得到了。Value(即何时objOfOtherNamespaceClass.CollectionOfInnerObj.Value调用)

请帮我解决这个问题...

0 投票
0 回答
55 浏览

c# - 在 DataContractSerializer 中反序列化时如何获取另一种类型的对象?

在对象版本控制的情况下,如果旧版本对象被序列化,现在我需要新版本的反序列化对象。

我已经通过互联网检查并观察到我们可以SerializationBinder用于此目的。但我不知道如何将它与DataContractSerialzer.

这个活页夹可以分配给BinaryFormatterusingBinder属性。

DataContractSerializer 是否存在类似的东西?

请让我知道是否有任何其他方法可以实现这一目标。

请纠正我,如果我认为这有什么不对。

0 投票
1 回答
100 浏览

c# - 使用 SerializationBinder 和 Surrogate 更新数据对象

我得到一个“Project1.Class1[]”类型的对象无法转换为“Project2.Class1[]”类型。尝试将数据从 class1 项目 1 获取到项目 2 时

传递的对象是 Project1.Class1 的列表,其中包含 Class2 的子对象。所以我创建了两个代理类来处理对象的转换,但是在代理处理更新 Class1 列表之前我得到了这个错误。

编辑:修复问题后,此解决方案将对需要在 C# 中更新 SQL 中的 varbinary 字段的人提供巨大帮助。大多数代码根源都在让人们开始的答案中。:)