Search code examples
c#initializationdatacontractserializer

Can a readonly field be initialized when using DataContractSerializer?


DataContractSerializer does not call a constructor or invoke field initializers when deserializing:

DataContractSerializer doesn't call my constructor?

Field Initializer in C# Class not Run when Deserializing

Setting the initial value of a property when using DataContractSerializer

Is it possible to initialize a readonly field after object deserialization? Must I abandon that language feature in order to use DataContractSerializer?


Solution

  • I'm not sure doing this is a good idea, but you can change the value of a readonly field outside the constructor or field initializer by using reflection.

    Putting something like:

    typeof(MyType).GetField("Field").SetValue(this, value);
    

    in your deserialization callback should work.