2016-10-28 37 views
-1

我想從反編譯一個類從一個allready保存.xml文件。問題是,只要我使用get{...} set{...};該代碼拋出一個StackOverflow異常。我用這段代碼創建一個無限循環嗎?因爲我無法通過停止點來追蹤循環。XMl Deserializise StackOverflowException

類:

[Serializable] 
public class AddOn 
{ 
    [System.Xml.Serialization.XmlElement("Name")] 
    public string Name { set; get; } 

    [XmlIgnore] 
    public ProcessStartInfo Info { 
     set { Info = value; } 
     get { 
      Info.Arguments = args; 
      Info.Arguments = Path; 
      return Info; 
     } 
    } 

    [System.Xml.Serialization.XmlElement("Arguments")] 
    public string args { set; get; } 
    [System.Xml.Serialization.XmlElement("Path")] 
    public string Path { set; get; } 

    [XmlIgnore] 
    public List<Process> ChildProcess = new List<Process>(); 

    public AddOn(string Name, ProcessStartInfo Info) 
    { 
     this.Name = Name; 
     this.Info = Info; 
     args = Info.Arguments; 
     Path= Info.FileName; 
    } 

    public AddOn() { } 
} 

[XmlIgnore] 
    public ProcessStartInfo Info { 
     set { Info = value; } 
     get { 
      Info.Arguments = args; 
      Info.Arguments = Path; 
      return Info; 
     } 
    } 

get{...}函數拋出StackOverflowException。

我會忽略ProcessStartInfo,因爲我無法序列化這種類型,因此創建了兩個字符串args和Path。

守則,應該返回附加組件的反序列​​化的列表:

  XmlSerializer serializer = new XmlSerializer(typeof(ObservableCollection<AddOn>)); 

      StreamReader reader = new StreamReader(path); 
      var addons = (ObservableCollection<AddOn>)serializer.Deserialize(reader); 
      reader.Close(); 
      return addons; 

回答

0

此調用

public ProcessStartInfo **Info** { 
    **set { Info = value; }** 
    get { 
     Info.Arguments = args; 
     Info.Arguments = Path; 
     return Info; 
    } 
} 

調用本身導致溢出

+0

感謝提的是!除此之外,我完全搞砸了獲得部分,這部分涉及ProcessStartInfo本身。那創造了循環。 – TheCheatsrichter