Comment utiliser l'Activateur.CreateInstance avec la Liste<T> lorsque Désérialiser json avec DataContractJsonSerializer
-
29-09-2019 - |
Question
Je suis la désérialisation de cette chaîne json:
[{"id":"1"},{"id":"2"},{"id":"3"}]
La classe qui représente les éléments est:
[DataContract]
public class MyClass
{
public MyClass() {
this._dtcreate = new DateTime();
}
private int _id;
[DataMember(Name = "id")]
public int Id {get;set;}
private DateTime _dtcreate;
}
Notez que dans le constructeur par défaut de MyClass-je définir une valeur par défaut pour "_dtcreate".
Donc, je suis en utilisant ce code pour Désérialiser json dans une gamme de T:
public static T[] DeserializeArray<T>(string json)
{
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T[]));
MemoryStream ms = new MemoryStream(Encoding.Unicode.GetBytes(json));
T[] gType = (T[])ser.ReadObject(ms);
return gType;
}
Quand je désérialiser une chaîne json j'ai pas trouvé dans mon désérialisé de la matrice de la propriété "_dtcreate" evalued.
Je pense que DataContractJsonSerializer ne pas utiliser le constructeur par défaut de MyClass.
Puis-je utiliser l'
T obj = Activator.CreateInstance<T>();
pour créer une instance pour tous les objets appartenant à la matrice "gType de" faire de m'assurer que tous les objets de ma liste deserialiced sont créés avec le constructeur par défaut de mon T classe ?
Merci beaucoup!
La solution
DataContract sérialiseurs ne sera pas exécuté les constructeurs.
Au lieu de cela, vous devriez mettre votre logique dans un [OnDeserializing]
méthode.