0

解決済み: 以下のコードでは、思ったほど無限ループが発生しません。ループは、逆シリアル化を呼び出すコードにありました。この投稿されたコードは問題なく動作します

次のオブジェクトを 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;
}

私が間違っていることを知っている人はいますか?

4

1 に答える 1

0

問題に関連しているかどうかはわかりませんが、 Deserialize メソッドは静的であるため、呼び出してはいけません...

var msgColl = MessageObjectCollection.Deserialize(xml);

それ以外の...

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

??

于 2010-07-28T12:25:04.033 に答える