Wie verwenden Activator.CreateInstance mit List , wenn Deserialize json mit DataContractJsonSerializer
-
29-09-2019 - |
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
verwendenT 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!
Lösung
Datacontract Serializer wird Konstrukteure nicht ausgeführt werden.
Stattdessen sollten Sie Ihre Logik in einer [OnDeserializing]
setzen Verfahren .