MathNET Numerics プロジェクト内で提供されるオブジェクトである DenseMatrix オブジェクトをシリアル化しようとしています。
以下に、いくつかの有用な情報を提供しました。
オブジェクト エクスプローラーと .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 を介してオブジェクトを実行しようとすると、「Type MathNet.Numerics.LinearAlgebra.Double.DenseMatrix は Serializable としてマークされていません」という SerializationException が発生します。
ここで何が起こっているのですか?BinaryFormatter が IsSerializable プロパティを直接見ていることはわかっているので、せき止めているのはそのためです。では、なぜ IsSerializable が false を返すのでしょうか?
編集
質問は、一般的に IsSerializable の .NET 実装に向けられており、Mathnet の例のみをコンテキストとして使用しています。
2回目の編集
混乱を助長したのは、MathNet の「ポータブル」ライブラリ バージョンを使用していたという事実だと思います。ポータブル ライブラリをコンパイルするために、ポータブル ライブラリでは System.SerializableAttribute を使用できないため、使用されるカスタム SerializableAttribute を作成しました。Mono で実行すると、System.Type は System.SerializableAttribute を探しますが、MathNet.SerializableAttribute しか見つけられません。