Ho bisogno di inizializzare il campo privato readonly dopo la deserializzazione. Ho folowing DataContract:Inizializza campi privati readonly dopo la deserializzazione
[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();
}
}
Tutto quello che mi serve, che dopo la deserializzazione _privateReadonlyField non è nullo.
Qualche suggerimento su questo - è possibile a tutti? Oppure ho bisogno di rimuovere la chiave "readonly", che non è una buona opzione.
Quale metodo di serializzazione stai usando? La costruzione degli oggetti differisce per diversi metodi. –
Cosa c'è di sbagliato nel contrassegnare il tuo '_privateReadonlyField' a' [DataMember] '? Il serializzatore del contratto di dati si prenderà cura di esso senza problemi. – dasblinkenlight
Joachim Isaksson: sto utilizzando DataContractJsonSerializer ma in realtà non importa: tutti i serializzatori utilizzano FormatterServices.GetUninitializedObject durante la deserializzazione. – Andris