2016-10-28 1 views
-1

私は既に保存された.xmlファイルからクラスを逆シリアル化しようとしています。問題はすぐに私がget{...} set{...};を使用すると、コードがStackOverflow例外をスローします。このコードで無限ループを作成しますか?私はポイントを停止してループを追跡することができなかったので。XMl Deserializise StackOverflowException

クラス:

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

get{...}機能が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() { } 
} 

私はProcessStartInfoを無視します。最初にこの型をシリアル化できなかったため、2つの文字列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自体を参照してget getの部分を完全に止めました。それはループを作りました。 – TheCheatsrichter

関連する問題