问题标签 [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.
c# - 二进制序列化版本问题
我有一个实现ISerializable
. 由于以下错误,在向该类添加新字段后无法反序列化旧的二进制数据:
SerializationException:找不到名为“x”的元素。
在这种情况下,序列化程序不应该自动分配null
或分配0
给该字段吗?我尝试使用Attribute [OptionalField(VersionAdded = 2)]
但结果相同。
我可以通过检查SerializationEntry
数组中是否存在字段名称来处理它,但这是正确的方法吗?有没有更好的办法?
c# - 没有任何 xml 标签的自定义对象 XML 序列化
我想创建一个自定义的可序列化“字符串”类来处理默认字符串格式,而无需在所有模型中实现逻辑。
我用隐式字符串运算符创建了一个可序列化的类
我的问题是序列化对象看起来像这样
而不是这个
如何以我想要的方式序列化对象?这可能吗?
c# - System.InvalidCastException “对象必须实现 IConvertible。” 使用 BinaryFormatter 反序列化字典时
这个类被另一个 Serializable 类引用。
下面是调用序列化/反序列化代码的代码:
实际的序列化/反序列化发生在这里:
如标题中所述,我得到 System.InvalidCastException “对象必须实现 IConvertible。” 反序列化时。字典是特例吗?我对任何其他类型都没有问题(到目前为止)。
c# - ISerializable 用于集合
我正在为一个Collection<T>
类编写序列化代码,并且想知道如何设置和获取集合中的项目。我正在使用二进制序列化。
我在以下代码中进行了尝试,但不确定正确的方法。
这是我的代码:
在该GetObjectData
方法中,List<Employee>
添加SerializationInfo
成功。但是,在该EmployeeCollection
方法中,每个添加的项目List<Employee>
都有一个null
条目。
Collection<T>
实现接口时如何正确序列化和反序列化类中的项目ISerializable
?
.net - 我怎样才能制作一个只采用可序列化对象的方法?
虽然有一个名为的接口ISerializable
,但它似乎是为了在一个类型被标记为[Serializable]
属性时自定义细节。如果我理解正确,[Serializable]
属性本身不会触及它所附加的类型上的任何东西,但是在运行时实现的东西会IFormatter
确定给定对象是否被标记为[Serializble]
属性(通过反射?我猜)。方法也IFormatter.Serializble()
需要 any Object
。这是否意味着 .NET 中的几乎每个对象都可以序列化?如果没有,如果传递了不可序列化的对象,有没有办法只采用可序列化的对象并产生编译时错误?
c# - 如何使用本身具有自定义序列化的 ISerializable 字段在对象中实现 GetObjectData?
为具有 ISerializable 字段的类实现 ISerializable 接口的正确方法是什么?
假设我有以下两个类,我必须为它们实现自定义序列化。我应该如何实现 Foo 的序列化/反序列化?
c# - 使用 ISerializable 会中断以前支持的类型的序列化
我正在尝试序列化/反序列化我拥有的具有System.Windows.Media.Color
属性的自定义类。它不起作用,因为Color
没有[Serializable]
属性。根据其他一些文章,我决定实现ISerializable
,它可以让我为 Color 类型定义自定义序列化逻辑。
颜色现在可以正确序列化,但现在我的其他属性(字节、浮点数、字符串)没有被序列化。我是否真的需要在实现时为每个单独的属性定义显式序列化逻辑,ISerializable
即使它们一开始就已经受到支持?
我本来希望byte
float
之前工作的属性和其他属性继续工作。有什么方法可以避免显式处理它们的序列化吗?
c# - 使用 ISerializable 接口处理可序列化类时如何修复内部 NullReferenceException?
我正在开发一个使用 5 个不同库作为模块的项目。我的任务是使用另一个库从其中一个库中保存和加载此信息。我已经制作了保存功能,但是数据的加载/反序列化给了我一个 Inner NullReferenceException。这是堆栈跟踪:
我查看了许多其他可能对我有帮助的线程,并尝试了诸如什么可能导致 System.TypeLoadException?和BinaryFormatter.Deserialize 在 ILMerge 之后“无法找到程序集”,但没有任何效果。
以下是反序列化给定文件的方法的要点:
这是我想用于加载/保存的 ISerializable 类的主要部分:
我做了一些测试来熟悉 ISerializable 并且没有这样的问题。我觉得来源可能与该界面有关,或者可能更简单。理想情况下,我希望这不会出错,这样我就可以使用给定的数据在表单上显示信息。我已经为此工作了这么多小时,现在一切都在我的脑海中变得混乱,所以调试起来很困难,而且它对我来说是新材料。任何帮助将不胜感激。
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 类
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
方法未被覆盖。