2016-10-28 5 views
-1

Ich versuche, eine Klasse aus einer bereits gespeicherten XML-Datei zu deserialisieren. Das Problem ist, sobald ich get{...} set{...}; verwenden, löst der Code eine StackOverflow-Ausnahme aus. Erstelle ich eine Endlosschleife mit diesem Code? Weil ich eine Schleife mit Haltepunkten nicht aufspüren konnte.XMl Deserialisierung StackOverflowException

Die Klasse:

[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() { } 
} 

Wo die

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

get{...} Funktion Stackoverflow wirft.

I ignorieren die ProcessStartInfo, weil ich diesen Typ an erster Stelle nicht serialisieren konnte und daher die zwei Zeichenfolgen Args und Path erstellt.

-Code, der die entserialisierten Liste der Addons zurückkehren sollte:

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

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

Antwort

0

dieser Aufruf

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

Anrufe selbst führt zum Überlauf

+0

Dank für die Erwähnung, dass! Abgesehen von dieser Zeile habe ich den Teil, der sich auf die ProcessStartInfo selbst bezieht, total vermasselt. Das hat die Schleife erzeugt. – TheCheatsrichter