DataContractSerializer и неизменяемые типы. Десериализация в известный экземпляр объекта

У меня есть класс, который фактически является перечислением на основе объекта. Существует статический набор объектов, предоставляемых классом, и все использует одни и те же экземпляры. например (Обратите внимание на частный конструктор)

[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, но это новый экземпляр, который не является одним из моих статических экземпляров. Это делает эталонные сравнения с известными статическими значениями неудачными.

Есть ли способ переопределить поведение сериализации для класса, чтобы я создавал экземпляр объекта вместо заполнения предоставленного мне экземпляра?

5
задан GazTheDestroyer 11 April 2012 в 11:01
поделиться