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が指摘したように、シリアル化してエラーを待ちます。