问题标签 [iserializable]

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 投票
0 回答
239 浏览

c# - 二进制序列化版本问题

我有一个实现ISerializable. 由于以下错误,在向该类添加新字段后无法反序列化旧的二进制数据:

SerializationException:找不到名为“x”的元素。

在这种情况下,序列化程序不应该自动分配null或分配0给该字段吗?我尝试使用Attribute [OptionalField(VersionAdded = 2)]但结果相同。

我可以通过检查SerializationEntry 数组中是否存在字段名称来处理它,但这是正确的方法吗?有没有更好的办法?

0 投票
0 回答
27 浏览

c# - 没有任何 xml 标签的自定义对象 XML 序列化

我想创建一个自定义的可序列化“字符串”类来处理默认字符串格式,而无需在所有模型中实现逻辑。

我用隐式字符串运算符创建了一个可序列化的类

我的问题是序列化对象看起来像这样

而不是这个

如何以我想要的方式序列化对象?这可能吗?

0 投票
1 回答
918 浏览

c# - System.InvalidCastException “对象必须实现 IConvertible。” 使用 BinaryFormatter 反序列化字典时

这个类被另一个 Serializable 类引用。

下面是调用序列化/反序列化代码的代码:

实际的序列化/反序列化发生在这里:

如标题中所述,我得到 System.InvalidCastException “对象必须实现 IConvertible。” 反序列化时。字典是特例吗?我对任何其他类型都没有问题(到目前为止)。

0 投票
1 回答
226 浏览

c# - ISerializable 用于集合

我正在为一个Collection<T>类编写序列化代码,并且想知道如何设置和获取集合中的项目。我正在使用二进制序列化。

我在以下代码中进行了尝试,但不确定正确的方法。

这是我的代码:

在该GetObjectData方法中,List<Employee>添加SerializationInfo成功。但是,在该EmployeeCollection方法中,每个添加的项目List<Employee>都有一个null条目。

Collection<T>实现接口时如何正确序列化和反序列化类中的项目ISerializable

0 投票
1 回答
43 浏览

.net - 我怎样才能制作一个只采用可序列化对象的方法?

虽然有一个名为的接口ISerializable,但它似乎是为了在一个类型被标记为[Serializable]属性时自定义细节。如果我理解正确,[Serializable]属性本身不会触及它所附加的类型上的任何东西,但是在运行时实现的东西会IFormatter确定给定对象是否被标记为[Serializble]属性(通过反射?我猜)。方法也IFormatter.Serializble()需要 any Object。这是否意味着 .NET 中的几乎每个对象都可以序列化?如果没有,如果传递了不可序列化的对象,有没有办法只采用可序列化的对象并产生编译时错误?

0 投票
0 回答
122 浏览

c# - 如何使用本身具有自定义序列化的 ISerializable 字段在对象中实现 GetObjectData?

为具有 ISerializable 字段的类实现 ISerializable 接口的正确方法是什么?

假设我有以下两个类,我必须为它们实现自定义序列化。我应该如何实现 Foo 的序列化/反序列化?

0 投票
2 回答
93 浏览

c# - 使用 ISerializable 会中断以前支持的类型的序列化

我正在尝试序列化/反序列化我拥有的具有System.Windows.Media.Color属性的自定义类。它不起作用,因为Color没有[Serializable]属性。根据其他一些文章,我决定实现ISerializable,它可以让我为 Color 类型定义自定义序列化逻辑。

颜色现在可以正确序列化,但现在我的其他属性(字节、浮点数、字符串)没有被序列化。我是否真的需要在实现时为每个单独的属性定义显式序列化逻辑,ISerializable即使它们一开始就已经受到支持?

我本来希望byte float之前工作的属性和其他属性继续工作。有什么方法可以避免显式处理它们的序列化吗?

0 投票
0 回答
47 浏览

c# - 使用 ISerializable 接口处理可序列化类时如何修复内部 NullReferenceException?

我正在开发一个使用 5 个不同库作为模块的项目。我的任务是使用另一个库从其中一个库中保存和加载此信息。我已经制作了保存功能,但是数据的加载/反序列化给了我一个 Inner NullReferenceException。这是堆栈跟踪:

我查看了许多其他可能对我有帮助的线程,并尝试了诸如什么可能导致 System.TypeLoadException?BinaryFormatter.Deserialize 在 ILMerge 之后“无法找到程序集”,但没有任何效果。

以下是反序列化给定文件的方法的要点:

这是我想用于加载/保存的 ISerializable 类的主要部分:

我做了一些测试来熟悉 ISerializable 并且没有这样的问题。我觉得来源可能与该界面有关,或者可能更简单。理想情况下,我希望这不会出错,这样我就可以使用给定的数据在表单上显示信息。我已经为此工作了这么多小时,现在一切都在我的脑海中变得混乱,所以调试起来很困难,而且它对我来说是新材料。任何帮助将不胜感激。

0 投票
0 回答
60 浏览

c# - 使用 ISerializable 接口的 WCF 序列化

这应该是可能的,但是我使用WCF ISerializable 接口概念进行了广泛搜索,但没有找到答案。希望高手能帮忙。

我读过的任何文档都指 info.AddValue(...) 类似于https://docs.microsoft.com/en-us/dotnet/api/system.runtime.serialization.iserializable?view=中的概念网络框架-4.8

总之,我有一个软件,它可以在单个 EXE 中执行图像处理等操作。我想使用 WCF 服务/客户端方法,并在同一台 PC 或不同 PC 上的单独服务上进行此处理。那么基本上分配过程。

我有一个带有端点的 WCF 服务,连接并与服务通信等,这里都很好。

我想将在客户端上创建的类的整个对象(及其局部变量/对象)发送到服务。

我有从ISerializable接口派生的类。类属性是[Serializable]。 它具有所需的构造函数 & GetObjectData() public Foo(SerializationInfo info, StreamingContext context) public void GetObjectData(SerializationInfo info, StreamingContext context)

使用BinaryFormatter将此对象序列化为byte[] 并发送。在服务端,它被反序列化为类对象。

在序列化期间,它确实进入GetObjectData()并完成其任务。但是在反序列化过程中,我得到的类对象只是默认对象而不是发送的对象,局部变量/对象未初始化。

这个类对象不是一个单例,我也不希望这样,因为在单独的线程上有很多这样的实例。我认为不必对类的每个参数都进行 Addvalue。由于这只是我所指的一个类,最终我必须发送许多这样的类对象。

我尝试使用 GetRealObject() 使用具有IObjectReference接口概念的辅助类--> 但是如何从中获取原始对象?

我读过关于代理的文章,关于如何发送一个类的整个对象也没有很好的例子。

我想要这个类的整个对象在服务端。

希望我清楚我的问题。我是 WCF concpts 的新手,我可能错过了一些使这项工作成功的秘密。

请提出任何想法!

示例代码,这是我想做的基本版本。

我需要已经执行 Add() 的 cls2 对象,因此 num1 和 num2 已更新,以便在服务端接收到 Add() 的正确值,例如 100 和 200。ImgProcessingConnector() 正在处理连接到服务。

WCF 客户端

WCF 服务

2 类

0 投票
1 回答
4192 浏览

c# - Sonarcube 不喜欢我的可序列化异常类的实现

对于以下异常实现, SonarCube 向我显示错误“更新 'ISerializable' 的此实现以符合推荐的序列化模式”:

不知道这里有什么问题,对我来说似乎完全遵循这里描述的规则https://rules.sonarsource.com/csharp/tag/pitfall/RSPEC-3925

ISerializable此规则在未遵循 Microsoft 推荐的序列化模式的情况下实现的类型引发了问题。

  • 缺少该System.SerializableAttribute属性。

  • 不可序列化的字段没有用该System.NonSerializedAttribute属性标记。

  • 没有序列化构造函数。

  • 未密封类型具有不受保护的序列化构造函数。

  • 密封类型具有非私有的序列化构造函数。

  • 非密封类型具有ISerializable.GetObjectData既不是公共的也不是虚拟的。

  • 派生类型具有不调用基构造函数的序列化构造函数。

  • 派生类型有一个ISerializable.GetObjectData不调用基方法的方法。

  • 派生类型具有可序列化的字段,但该ISerializable.GetObjectData方法未被覆盖。