none
Десериализация JSON RRS feed

  • Вопрос

  • Столкнулся с проблемой при десериализации. Проблема такая:

    Допустим есть класс:

    [DataContract]
        [System.ComponentModel.DataObject]
        public class Person     {
            protected PersonDataObject mPersonDataObject;
            
    public  Person() { 
    mPersonDataObject = new PersonDataObject(); } //
    
    [DataMember]
            public ulong Id
            {
                get { return mPersonDataObject.Id; }
                set { mPersonDataObject.Id = value; }
            }
    
            [DataMember]
            public string FirtsName
            {
                get { return mPersonDataObject.FirstName; }
                set { mPersonDataObject.FirstName = value; }
            }
    
            [DataMember]
            public string LastName
            {
                get { return mPersonDataObject.LastName; }
                set { mPersonDataObject.LastName = value; }
            }
    
            [DataMember]
            public string MiddleName
            {
                get { return mPersonDataObject.MiddleName; }
                set { mPersonDataObject.MiddleName = value; }
            }
    
    
            [DataMember]
            public DateTime BirthDate
            {
                get { return mPersonDataObject.BirthDate; }
                set { mPersonDataObject.BirthDate = value; }
            }
    
            [DataMember]
            public string TimeZone
            {
                get { return mPersonDataObject.TimeZone; }
                set { mPersonDataObject.TimeZone = value; }
            }
    
             /// и .т.д.
    }
    
    [CollectionDataContract]
        public class PersonCollection : List<Person> { }
    


    От клиента приходит строка в формате JSON, которую и надо десериализовать в коллекцию Person (приходящие данные точно правильные, т.е.

    формату соотвтетствуют). Десериализовать пытаюсь так:

     

    DataContractJsonSerializer serializer
                        = new DataContractJsonSerializer(typeof(PersonCollection));
    
                    MemoryStream memoryStream = new MemoryStream(Encoding.UTF8.GetBytes(
                        hdfdPersonList.Value.ToCharArray()), false);
    
                    personCollection =
                        (PersonCollection)serializer.ReadObject(memoryStream);
    

    И на последней строке ловлю NullReferenceException и самое интересное, что это исключение возникает, когда десериализатор присваивает свойствам

     

    обекта значения. Например, вот в этом месте mPersonDataObject.Id = value; - десериализатор говорит, что mPersonDataObject не существует! Как он не существует, если он создается в конструкторе класса Person??? Получается, что сам объект Person

    при выполнении ReadObject не создается, но свойствам объекта присваюваются значения?! -   нафик так тупо работает этот DataContractJsonSerializer и что всё таки делать, чтоб этот косяк обойти.






    • Изменено A.G.Sedov 7 января 2012 г. 20:09
    7 января 2012 г. 20:00

Ответы

Все ответы