2017-05-28 2 views
0

Ich habe eine Selbstreferenzierungsschleife. Ich habe versucht, einige der anderen Antworten zu lesen und umzusetzen, aber es scheint nicht zu funktionieren. Ich habe eine Klasse, die mein Objekt als JSON-Datei (Methode) speichert. Es versucht, das Objekt zu serialisieren, löst jedoch eine Ausnahme für eine sich selbst referenzierende Schleife aus. Das Objekt, das ich serialisiere, ist der zweite Block (Klasse). Wie kann ich das Problem beheben? Es hat funktioniert, bis ich Buttons hinzugefügt habe, also gehe ich davon aus, dass ich mit den Handlern etwas falsch mache, aber ich habe wirklich keine Ahnung.Selbstreferenzierungsschleife Fehler

Public Sub saveLocalSettings() 
     Console.WriteLine("saveLocalSettings") 
     If Not Directory.Exists(_SettingsFile) Then 
      Directory.CreateDirectory(_SettingsFile) 
     End If 
     ' Try 
     Dim strConfigurationManager As String = JsonConvert.SerializeObject(_LocalSettings, PreserveReferencesHandling.Objects) 
     'Dim strConfigurationManager As String = JsonConvert.SerializeObject(_LocalSettings, Newtonsoft.Json.ReferenceLoopHandling.Ignore) 
     lm.writeFile(_SettingsFile + _FileName, strConfigurationManager, True) 
     ' Catch ex As Exception 
     ' End Try 
    End Sub 

Imports Newtonsoft.Json 
Public Class RGOSetting 
    Public Property id As String 
    Public Property title As String 
    Private mtbTitle As New MaskedTextBox 
    Public Property sharestatus As Integer 
    Public Property settingstring As String 
    Public Property userid As Integer 
    Public Property setting_profiles As New List(Of RGOSettingProfile) 
    Private rgolcm As RGOLeagueChampionManager 
    ' Private rgolssm As RGOLeagueSumSpManager 
    Public btnUpdate As New Button 
    Public btnReset As New Button 
    Public btnClear As New Button 
    End Class 

Public Class RGOSettingProfile 
    Public Property champion As LeagueChampion 
    Public Property summoner_spells As New List(Of LeagueSummonerSpell) 

    Public Sub New() 
    End Sub 

Public Sub New(ByVal strChampion As String, ByVal strSummonerSpell As List(Of String)) 
End Sub 
End Class 
+0

Was Sie versuchen zu tun? Sie können Kontrollen nicht serialisieren (zumindest nicht so), deshalb ist nicht klar, warum sie da sind. Ist '_LocalSettings' eine Instanz von' RGOSetting'? Was ist 'RGOSettingProfile'? Versuchen Sie etwas wie Profile (mehrere benannte Konfig-Sets) zu machen? – Plutonix

+0

Ja, ich habe mehrere Einstellungen mit mehreren Einstellungen. Die Steuerelemente werden dynamisch zu einem Panel hinzugefügt und ich muss einen Handler hinzufügen, um es zu speichern. Ich habe das Bild hier: https://docs.google.com/document/d/1-0AOVbB5W589j52-LEN1wRat80jPrLTmCjtoOj0u7Pc/edit?usp=sharing. Ich muss noch den zweiten Teil hinzufügen, wo jeder Champion ein weiteres Icon-Panel erzeugt, in dem man Objekte an- und abwählen kann. Sie können jeden der Champions auswählen und jeder Champion hat eine Liste der gleichen Option. Ich habe auch hinzugefügt RGOSettingProfile –

+0

Wenn es 3 Tasten mit jeder Sache verbunden sind, müssen sie nicht dynamisch sein - angesichts der Namen sie alle tun das gleiche in jedem Fall. Trennen Sie die UI-Daten von den Benutzerdaten (etwas in den Daten könnte sie wie einen Text oder ein Bild abbilden). Eine Möglichkeit, die Daten mit dem UI zu verknüpfen, wäre eine Benutzersteuerung zu erstellen. Wenn eines dieser Objekte übergeben wird, zeigt es die Daten entsprechend an. – Plutonix

Antwort

0

I ended tun dies mit den Tasten und es mir erlaubt, die Objekte zu speichern:

<JsonIgnore> Public btnUpdate As New Button 
<JsonIgnore> Public btnReset As New Button 
<JsonIgnore> Public btnClear As New Button