Проблема xml-десериализации рекурсивного вложенного объекта

Решено: приведенный ниже код не вызывает бесконечный цикл, как я думал. цикл был в коде, вызывающем десериализацию. этот размещенный код отлично работает

Я пытаюсь сериализовать и десериализовать в xml следующий объект

public class MessageObjectCollection : List<MessageObject>
{
    public string Serialize()
    {
        return XmlObjectSerializer.SerializeObject(this);
    }

    public static MessageObjectCollection DeSerialize(string serializedPriceHistory)
    {
        return XmlObjectSerializer.DeserializeObject<MessageObjectCollection>(serializedPriceHistory);
    }
}

Класс MessageObject выглядит так

public class MessageObject
{
    public string Title;
    public MessageObjectCollection Responses;
}

Итак, если у меня есть экземпляр messageobjectcollection, который выглядит так:

var msgColl = new MessageObjectCollection
    {
         new MessageObject
              {
                   Title = "Hello",
                   Responses = new MessageObjectCollection
                        {
                             new MessageObject
                                  {
                                      Title = "hi",
                                      Responses = null
                                  }
                        }
              }
    }

Я могу просто сериализовать это, вызвав var xml = msgColl.Serialize();

Однако, когда я пытаюсь десериализовать это, вызывая var msgColl = new MessageObjectCollection().Deserialize(xml);

Я получаю исключение переполнения стека в методе десериализации:

public static T DeserializeObject<T>(string xml)
{
    T result;
    var ser = new XmlSerializer(typeof(T));
    var buffer = StringToUTF8ByteArray(xml);
    using (var stream = new MemoryStream(buffer, 0, buffer.Length))
    {
        result = (T) ser.Deserialize(stream);
    }
    return result;
}

Кто-нибудь знает, что я делаю неправильно?


person Richard Brink    schedule 28.07.2010    source источник


Ответы (1)


Я не уверен, имеет ли это отношение к проблеме, но поскольку метод Deserialize является статическим, разве вы не должны вызывать...

var msgColl = MessageObjectCollection.Deserialize(xml);

вместо...

var msgColl = new MessageObjectCollection().Deserialize(xml);

??

person barrylloyd    schedule 28.07.2010
comment
Да, ваше право конечно. Хотя проблема была не в этом. Этот код работает просто отлично, бесконечный цикл происходил не в этом коде, а вверх по течению в коде, вызывающем десериализацию.... - person Richard Brink; 28.07.2010