Как использовать Activator.createInstance с List при десериализации json с помощью dataContractJsonserializer
-
29-09-2019 - |
Вопрос
Я десериализую эту строку JSON:
[{"id":"1"},{"id":"2"},{"id":"3"}]
Класс, который представляет элементы:
[DataContract]
public class MyClass
{
public MyClass() {
this._dtcreate = new DateTime();
}
private int _id;
[DataMember(Name = "id")]
public int Id {get;set;}
private DateTime _dtcreate;
}
Обратите внимание, что в конструкторе по умолчанию MyClass я устанавливаю значение по умолчанию для «_dtcreate».
Итак, я использую этот код для десериализации JSON в массив 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;
}
Когда я десериализую строку JSON, я не нашел в своем десериализованном массиве, оценивается свойство «_DTCreate».
Я думаю, что datacontractjsonserializer не использует конструктор по умолчанию myclass.
Могу ли я использовать
T obj = Activator.CreateInstance<T>();
Чтобы создать экземпляр для всего объекта, принадлежащего массиву «gtype», чтобы я гарантировал, что все объекты моего списка Deserialied созданы с помощью конструктора Dafault моего класса T?
Большое спасибо!
Решение
DataContratt Serializers не будут запускать конструкторов.
Вместо этого вы должны поместить свою логику в атмосфера [OnDeserializing]
метод.