Comment utiliser l'Activateur.CreateInstance avec la Liste<T> lorsque Désérialiser json avec DataContractJsonSerializer

StackOverflow https://stackoverflow.com/questions/4298377

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!

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top