Potrzebuję zainicjować prywatne pole readonly po Deserializacji. Mam folowing DataContract:Inicjuj prywatne pola readonly po Deserializowaniu
[DataContract]
public class Item
{
public Item()
{
// Constructor not called at Deserialization
// because of FormatterServices.GetUninitializedObject is used
// so field will not be initialized by constructor at Deserialization
_privateReadonlyField = new object();
}
// Initialization will not be called at Deserialization (same reason as for constructor)
private readonly object _privateReadonlyField = new object();
[DataMember]
public string SomeSerializableProperty { get; set; }
[OnDeserializing]
public void OnDeserializing(StreamingContext context)
{
// With this line code even not compiles, since readonly fields can be initialized only in constructor
_privateReadonlyField = new object();
}
}
Wszystko co muszę, że po Deserializacji _privateReadonlyField nie jest null.
Wszelkie sugestie na ten temat - czy to w ogóle możliwe? Lub muszę usunąć "tylko do odczytu" klucz, który nie jest dobrym rozwiązaniem.
Jakie metody serializacji używasz? Konstrukcja obiektów różni się dla różnych metod. –
Co jest nie tak z oznaczeniem '_privateReadonlyField' a' [DataMember] '? Serializator kontraktu danych zajmie się tym bez problemu. – dasblinkenlight
Joachim Isaksson: Używam DataContractJsonSerializer, ale tak naprawdę to nie ma znaczenia - wszystkie Serializatory używają FormatterServices.GetUninitializedObject podczas Deserializacji. – Andris