Frage

Ich bin Deserialisieren dieses json string:

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

Die Klasse, die die Elemente darstellt, ist:

[DataContract]
public class MyClass 
{

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

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

        private DateTime _dtcreate;
}

Beachten Sie, dass in dem Standard-Konstruktor von MyClass ich einen Standardwert für „_dtcreate“ gesetzt.

Also, ich bin mit diesem Code zu Deserialize json in ein Array von 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;
    }

Wenn ich einen JSON-String deserialisieren ich nicht in meinem entserialisierten Array die Eigenschaft "_dtcreate" evalued gefunden.

Ich denke, DataContractJsonSerializer verwenden nicht das Standard-Konstruktor von MyClass.

Kann ich die

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

eine Instanz für alle Objekte zu erstellen, um das Array „GTYPE“ gehören, um mich zu sorgen, dass alle Objekte meiner Liste deserialiced ??mit dem dafault Konstruktor meiner T-Klasse erstellt?

Vielen Dank!

War es hilfreich?

Lösung

Datacontract Serializer wird Konstrukteure nicht ausgeführt werden.

Stattdessen sollten Sie Ihre Logik in einer [OnDeserializing] setzen Verfahren .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top