2017-05-28 25 views
0

自己参照ループがあります。私は他の答えを読んで実装しようとしましたが、うまくいかないようです。私はオブジェクトをjsonファイル(メソッド)として保存するクラスを持っています。オブジェクトをシリアライズしようとしますが、自己参照ループの例外をスローします。私が直列化しているオブジェクトは、2番目のブロック(クラス)です。問題を解決するにはどうすればよいですか?ボタンを追加するまでは機能していたので、ハンドラに何か間違っていると仮定していますが、実際にはわかりません。自己参照ループエラー

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私はまだ各チャンピオンがオブジェクトを選択/選択解除することができる別のアイコンパネルを作成する第2の部分を追加する必要があります。あなたはチャンピオンのいずれかを選ぶことができ、各チャンピオンは同じオプションのリストを持っています。私はまた、RGOSettingProfileを追加しました –

+0

3つのボタンがそれぞれのものに関連付けられている場合、それらは動的である必要はありません。 UIデータをユーザーデータから切り離します(データ内の何かがテキストや画像のようにマップされます)。データをUiにリンクする1つの方法は、ユーザーコントロールを作成することです。それらのオブジェクトの1つを渡すと、それに応じてデータが表示されます。 – Plutonix

答えて

0

私はボタンでこれをやってしまった、それは私がオブジェクトを保存することができ:

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