我需要在反序列化后初始化私有只读字段。我有以下DataContract:
[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 不为null。
你有没有任何建议或方法可以实现这一点?或者说我需要移除 "readonly" 关键字,但这不是一个好的选择。
_privateReadonlyField
标记为[DataMember]
有什么问题吗?数据契约序列化程序会毫无问题地处理它。 - Sergey Kalinichenko