Cómo utilizar Activator.CreateInstance con la lista cuando Deserialize JSON con DataContractJsonSerializer

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

Pregunta

Estoy deserializar esta cadena JSON:

[{"id":"1"},{"id":"2"},{"id":"3"}]

La clase que representa los artículos es:

[DataContract]
public class MyClass 
{

        public MyClass() {
            this._dtcreate = new DateTime();
        }

        private int _id;
        [DataMember(Name = "id")]
        public int Id {get;set;}

        private DateTime _dtcreate;
}

Tenga en cuenta que en el constructor por defecto de MiClase que establece un valor predeterminado para "_dtcreate".

Por lo tanto, estoy usando este código para Deserialize JSON en una matriz 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;
    }

Cuando Deserialize una cadena JSON: No he hallado en mi arsenal deserializado la propiedad "_dtcreate" evalued.

Creo DataContractJsonSerializer no utiliza el constructor predeterminado de MiClase.

¿Puedo utilizar el

T obj = Activator.CreateInstance<T>();

para crear una instancia para todos los objetos que pertenecen a la matriz "GType" para que me aseguro de que todos los objetos de mi lista deserialiced ??se crean con el constructor dafault de mi clase T?

Muchas gracias!

¿Fue útil?

Solución

serializadores DataContract no se ejecutará constructores.

En su lugar, debe poner su lógica en un [OnDeserializing] método .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top