tôi cần phải khởi tạo lĩnh vực readonly tin sau Deserialization. Tôi có folowing DataContract:Khởi lĩnh vực readonly tin sau 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();
}
}
Tất cả những gì tôi cần, sau khi Deserialization _privateReadonlyField không phải là rỗng.
Mọi góp ý về vấn đề này - là nó có thể ở tất cả? Hoặc tôi cần xóa khóa "chỉ đọc", đây không phải là lựa chọn tốt.
Bạn đang sử dụng phương pháp tuần tự nào? Việc xây dựng các đối tượng khác nhau cho các phương pháp khác nhau. –
Có gì sai với đánh dấu của bạn '_privateReadonlyField' một' [DataMember] '? Serializer hợp đồng dữ liệu sẽ chăm sóc nó mà không có một vấn đề. – dasblinkenlight
Joachim Isaksson: Tôi đang sử dụng DataContractJsonSerializer nhưng thực sự điều này không quan trọng - tất cả các Serializers sử dụng FormatterServices.GetUninitializedObject khi Deserializing. – Andris