gpt4 book ai didi

c# - IsSerializable 为标记为 Serializable 的对象返回 "false"

转载 作者:行者123 更新时间:2023-11-30 17:57:04 24 4
gpt4 key购买 nike

我正在尝试序列化一个 DenseMatrix 对象,它是 MathNET Numerics 项目中提供的一个对象。

DenseMatrix.cs

下面我提供了一些有用的信息。

  • 我可以从对象资源管理器和 .NET 反射器中看到这个类(以及这个类继承的所有东西)被标记为 [Serializable]。

  • Attribute.IsDefined(typeof(MathNet.Numerics.LinearAlgebra.Double.DenseMatrix), typeof(SerializedAttribute)) 返回 true

  • typeof(MathNet.Numerics.LinearAlgebra.Double.DenseMatrix).IsSerializable 返回 false

  • 似乎 Mathnet.Numerics Matrix 系列中的所有内容都标记为 [Serializable],尽管它们都显示出相同的不可序列化行为。

现在,当我尝试通过 BinaryFormatter 运行我的对象时,我得到一个 SerializationException“类型 MathNet.Numerics.LinearAlgebra.Double.DenseMatrix 未标记为可序列化”。

这是怎么回事?我知道 BinaryFormatter 正在直接查看 IsSerializable 属性,所以这就是它出现的原因。那么为什么 IsSerializable 返回 false?

编辑

这个问题通常更多地针对 IsSerializable 的 .NET 实现,并且仅使用 The Mathnet 示例作为上下文。

第二次编辑

我认为更令人困惑的是我使用的是 MathNet 的“可移植”库版本。为了编译可移植库,他们创建了一个自定义的 SerializableAttribute,因为 System.SerializableAttribute 不可用于可移植库。使用 Mono 运行时,System.Type 会查找 System.SerializableAttribute,但只会查找 MathNet.SerializableAttribute。

最佳答案

.NET 递归检查标记为 [Serializable] 的对象的所有成员,如果 [Serializable] 类的任何成员的类型也未标记为 [Serializable],则 IsSerializable 返回 false。

上述情况的解决方案是简单地将属于 DenseMatrix 成员的类标记为 [Serializable]。

即密集列矩阵存储

矩阵存储

关于c# - IsSerializable 为标记为 Serializable 的对象返回 "false",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13500689/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com