问题xml反序列化递归嵌套对象

问题xml反序列化递归嵌套对象

问题描述:

解决:下面的代码不会导致无限循环,因为我认为。该循环在调用反序列化的代码中。这个贴的代码只是正常问题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; 
} 

任何人都知道我做错了吗?

林不知道,如果它的相关的问题,但作为反序列化方法是静态的你不应该叫...

var msgColl = MessageObjectCollection.Deserialize(xml); 

的,而不是...

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

+0

是的,你的权利当然。但这不是问题。这段代码工作得很好,无限循环发生在这段代码中,但是在调用反序列化的代码中上游...... – 2010-07-28 12:57:12

+0

好吧,很高兴你知道了。 – barrylloyd 2010-07-28 13:16:15