2

C#に[Serializable]クラスがあり、それぞれ異なるクラスの多くのフィールドがあります。このクラスのインスタンスを保存/ロードするためにシリアル化を使用していますが、[Serializable]属性をどこかに追加するのを忘れて、実行時にのみこれを学習することがよくあります。これはコンパイル中に確認できますか?

たとえば、このコードは、

[Serializable]
class House {
 List<Room> Rooms;
}
class Room
{
}

Roomクラスはシリアル化できないため、検証に合格しないでください。

4

2 に答える 2

4

いいえ、コンパイル時にできることは何もありません。

ただし、このための単体テストを追加するのは簡単です。アセンブリ内でシリアル化可能な各クラスを見つけ、すべてのフィールドを再帰的に見つけて、各フィールドがシリアル化可能であることを確認できます。もちろん、より簡単なアプローチは、インスタンスをシリアル化することです:)

単体テストはコンパイル時のチェックほど良くはありませんが、「ライブ」で行うよりはましです。

于 2013-03-25T21:04:11.350 に答える
2

コンパイル時に型がシリアル化可能かどうかを判断する方法はありません。これを実装するタイプISerializableの場合、APIを.のみを取るように制限することでこれを行うことができますISerializable[Serializable]ただし、特定の属性が適用されている型を取得するようにAPIを制約できないため、これは装飾された型では機能しません。

于 2013-03-25T21:04:17.323 に答える