Мне нужно инициализировать личное поле readonly после Deserialization. Я folowing DataContract:Инициализировать приватные поля readonly после Deserializing
[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();
}
}
Все, что мне нужно, что после десериализации _privateReadonlyField не является нулевым.
Любые предложения об этом - возможно ли вообще? Или мне нужно удалить ключ «readonly», что не является хорошим вариантом.
Какой метод сериализации вы используете? Конструкция объектов различна для разных методов. –
Что случилось с маркировкой вашего '_privateReadonlyField'' '[DataMember]'? Сериализатор данных может позаботиться об этом без проблем. – dasblinkenlight
Joachim Isaksson: Я использую DataContractJsonSerializer, но на самом деле это не имеет значения - все сериализаторы используют FormatterServices.GetUninitializedObject при десериализации. – Andris