選択的シリアル化Selective serialization

クラスには、シリアル化できないフィールドが含まれていることがよくあります。A class often contains fields that shouldn't be serialized. たとえば、クラスのメンバー変数の 1 つにスレッド ID が格納されているとします。For example, assume a class stores a thread ID in a member variable. クラスを逆シリアル化すると、クラスのシリアル化時に格納された ID を持つスレッドが実行されなくなることがあります。したがって、この値をシリアル化しても意味はありません。When the class is deserialized, the thread stored the ID for when the class was serialized might no longer be running; so serializing this value doesn't make sense. 以下のように、メンバー変数に NonSerialized 属性を使用してマークすることで、メンバー変数がシリアル化されないようにすることができます。You can prevent member variables from being serialized by marking them with the NonSerialized attribute as follows.

[Serializable]  
public class MyObject   
{  
  public int n1;  
  [NonSerialized] public int n2;  
  public String str;  
}  

機密データを含むオブジェクトは、可能であれば、シリアル化できないようにしてください。If possible, make an object that could contain security-sensitive data nonserializable. オブジェクトをシリアル化する必要がある場合は、機密データを格納する特定のフィールドに NonSerialized 属性を適用します。If the object must be serialized, apply the NonSerialized attribute to specific fields that store sensitive data. これらのフィールドをシリアル化の対象から除外しない場合は、フィールドに格納されているデータがシリアル化のアクセス許可を持つ任意のコードに公開されることに注意してください。If you don't exclude these fields from serialization, be aware that the data they store are exposed to any code that has permission to serialize. 安全なシリアル化コードの記述の詳細については、「セキュリティとシリアル化」を参照してください。For more information about writing secure serialization code, see Security and Serialization.

警告

バイナリ シリアル化は危険です。Binary serialization can be dangerous. 信頼できないソースからのデータの逆シリアル化、および管理下にないシステムへのラウンドトリップのシリアル化をしてはいけません。Never deserialize data from an untrusted source and never round-trip serialized data to systems not under your control.

関連項目See also