2017-05-28 64 views
0

我有一個自引用循環。我試着閱讀和實施其他一些答案,但似乎並不奏效。我有一個類,將我的對象保存爲json文件(方法)。它試圖序列化對象,但爲自引用循環引發異常。我正在序列化的對象是第二個塊(類)。我該如何解決這個問題?它一直工作,直到我添加按鈕,所以我假設我在處理程序中做了一些錯誤,但我真的不知道。自引用循環錯誤

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

你到底想幹什麼?你不能序列化控件(至少不是這樣),所以不清楚它們爲什麼在那裏。 '_LocalSettings'是'RGOSetting'的一個實例嗎?什麼是'RGOSettingProfile'?你是否想做一些配置文件(多個命名配置集)? – Plutonix

+0

是的,我有多個設置的多個設置。這些控件是動態添加到面板的,我需要添加一個處理程序來保存它。我在這裏有圖片:https://docs.google.com/document/d/1-0AOVbB5W589j52-LEN1wRat80jPrLTmCjtoOj0u7Pc/edit?usp=sharing。我仍然需要添加第二部分,每個冠軍都會生成另一個圖標面板,您可以在其中選擇/取消選擇對象。你可以選擇任何一個冠軍,每個冠軍都有一個相同選項的列表。我還添加了RGOSettingProfile –

+0

如果有3個按鈕與每個事物相關聯,則它們不需要是動態的 - 給定名稱它們在每種情況下都做同樣的事情。從用戶數據中分離出用戶界面的東西(數據中的東西可能會將它們映射爲像文本或圖像一樣)。將數據鏈接到UI的一種方法是創建一個用戶控件。當傳遞其中一個對象時,它會相應地顯示數據。 – Plutonix

回答

0

我結束了按鈕這樣做的,它讓我保存的對象:

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