Résolu: le code ci-dessous ne provoque pas une boucle infinie comme je le pensais. la boucle était dans le code appelant la désérialisation. ce code affiché fonctionne très bienProblème xml-désérialisant l'objet imbriqué récursif
Je suis en train de sérialisation et la désérialisation XML l'objet suivant
public class MessageObjectCollection : List<MessageObject>
{
public string Serialize()
{
return XmlObjectSerializer.SerializeObject(this);
}
public static MessageObjectCollection DeSerialize(string serializedPriceHistory)
{
return XmlObjectSerializer.DeserializeObject<MessageObjectCollection>(serializedPriceHistory);
}
}
La classe MessageObject ressemble à ceci
public class MessageObject
{
public string Title;
public MessageObjectCollection Responses;
}
Donc, si j'ai une instance de messageobjectcollection qui ressemble à:
var msgColl = new MessageObjectCollection
{
new MessageObject
{
Title = "Hello",
Responses = new MessageObjectCollection
{
new MessageObject
{
Title = "hi",
Responses = null
}
}
}
}
Je peux sérialiser cela très simplement en appelant var xml = msgColl.Serialize();
Cependant, lorsque j'essaie de désérialiser cela en appelant var msgColl = new MessageObjectCollection(). Deserialize (xml);
je reçois une exception de débordement de pile dans la méthode de désérialisation:
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;
}
Quelqu'un sait ce que je fais mal?
Oui, votre droit bien sûr. Ce n'était pas le problème cependant. Ce code fonctionne très bien, la boucle infinie ne se passait pas dans ce code mais en amont dans le code appelant la désérialisation ... –
Ok, content que vous l'ayez compris. – barrylloyd