C#のオブジェクトがシリアル化可能かどうかを確認する簡単な方法を探しています。
ご存知のとおり、ISerializableインターフェイスを実装するか、[Serializable]をクラスの先頭に配置することにより、オブジェクトをシリアル化可能にします。
私が探しているのは、属性を取得するためにクラスを反映する必要なく、これをすばやくチェックする方法です。isステートメントを使用すると、インターフェイスが高速になります。
@Flardの提案を使用して、これは私が思いついたコードです。悲鳴はより良い方法があるということです。
private static bool IsSerializable(T obj)
{
return ((obj is ISerializable) || (Attribute.IsDefined(typeof (T), typeof (SerializableAttribute))));
}
または、オブジェクトのタイプを取得してから、そのタイプでIsSerializableプロパティを使用することもできます。
typeof(T).IsSerializable
これは、クラスに他のクラスが含まれている場合に対処しているクラスだけに思えるかもしれませんが、すべてを確認するか、@ pbが指摘したようにシリアル化してエラーを待機する必要があります。