解決済み: 以下のコードでは、思ったほど無限ループが発生しません。ループは、逆シリアル化を呼び出すコードにありました。この投稿されたコードは問題なく動作します
次のオブジェクトを 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;
}
私が間違っていることを知っている人はいますか?