私は事実上オブジェクトベースの列挙型であるクラスを持っています。クラスによって公開されるオブジェクトの静的セットがあり、すべてがこれらの同じインスタンスを使用します。例(プライベートコンストラクターに注意してください)
[DataContract]
public class FieldType
{
public static readonly FieldType Default = new FieldType(1, "Default");
public static readonly FieldType Name = new FieldType(2, "Name");
public static readonly FieldType Etc = new FieldType(3, "Etc");
private FieldType(uint id, string name)
{
Id = id;
Name = name;
}
[DataMember] public uint Id { get; private set; }
[DataMember] public string Name { get; private set; }
//snip other properties
}
これは、WCF全体でシリアル化する必要があるまではうまく機能します。はDataContractSerializer
、コンストラクターをバイパスして新しいオブジェクトを作成します。これにより有効なFieldType
オブジェクトが生成されますが、これは静的インスタンスの1つではない新しいインスタンスです。これにより、既知の静的値に対する参照比較が失敗します。
クラスのシリアル化動作をオーバーライドして、提供されたインスタンスにデータを入力する代わりにオブジェクトインスタンスを作成する方法はありますか?