2010-07-28 1 views
0

해결 : 아래 코드는 내가 생각한 것처럼 무한 루프를 일으키지 않습니다. 루프가 코드에서 직렬화를 호출했습니다. 이 게시 코드는 내가 직렬화하고 내가의 인스턴스가있는 경우문제 재귀 중첩 객체 xml-deserializing

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; 
} 

처럼 보이는 다음 개체를 XML로 직렬화하기 위해 노력하고

잘 작동합니다 다음과 같은 메시지 객체 컬렉션 :

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

나는 이것을 호출하여 그냥 괜찮게 serialize 할 수있다. 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; 
} 

누구든지 내가 잘못 알아?

답변

0

임하지 않도록 경우는 ... 문제에 있지만, 역 직렬화 방법을 사용하여 호출해서는 안 정적으로 관련 대신

var msgColl = MessageObjectCollection.Deserialize(xml); 

...

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

?

+0

예, 물론입니다. 그래도 문제는 아니 었습니다. 이 코드는 잘 작동하지만 무한 루프는이 코드에서 발생하지 않고 코드의 업스트림에서는 deserialization을 호출합니다. –

+0

Ok, 다행입니다. – barrylloyd