Как использовать Activator.createInstance с List при десериализации json с помощью dataContractJsonserializer

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

Вопрос

Я десериализую эту строку 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] метод.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top