Сериализация вложенных классов - PullRequest
0 голосов
/ 09 февраля 2012

Я хотел бы сериализовать (в формате JSON) список объектов, где каждый объект имеет свойство объекта другого типа.Это то, что я получил до сих пор:

[DataContract]
public class Person{

   [DataMember]
   public string Name { get; set; }
   [DataMember]
   public Address FullAddress { get; set; }
}

[DataContract]
public class Address {
   private readonly byte[] _foo;
   private ulong _value;

   public byte[] Foo { get { return (byte[]) _foo.Clone(); }}

   public ulong Value { get { return _value; } set { return _value; }}

   public Address(byte [] bytes){
      _foo = new byte[bytes.Length];
      Array.Copy(bytes, _foo, bytes.Length);

      foreach(byte b in _foo){
        _value |= b; // I do some bit manipulation here and modify the _value
      }

   }

   public MacAddress() // added this otherwise I get an exception
   {

   }
}

вот как я сериализую и десериализую:

public class MyJson{

    public MyJson(){
      var list = new List<Person>{ /* added a bunch of person here */ };
      var serializer = new JavaScriptSerializer();
      string json = serializer.Serialize(list);
      // serialization works fine


      var desList = serializer.Deserialize<IList<Person>>(json);

      // the deserialization doesn't properly deserialize Address property.

   }
}

Как уже говорилось выше, сериализация работает нормально, но десериализация неt десериализовать адрес правильно.Я получаю число для свойства Value (как и ожидалось), но не для Foo (я знаю, что отсутствует установщик, но что если по какой-то причине я не могу установить установщик?).

Что мне здесь не хватает?

1 Ответ

2 голосов
/ 09 февраля 2012

Я не использую JSon, но если он работает как сериализация XML, я предполагаю, что это связано с тем, что Foo не имеет установщика.Возможно, вам потребуется создать собственный класс сериализации, который использует конструктор для установки Foo.Другие могут предоставить больше подробностей.

...