【问题标题】:Self-referencing loop error自参考循环错误
【发布时间】:2017-05-28 17:30:24
【问题描述】:

我有一个自引用循环。我尝试阅读和实施其他一些答案,但似乎不起作用。我有一个类将我的对象保存为 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

【问题讨论】:

  • 你想做什么?您不能序列化控件(至少不是那样),因此不清楚它们为什么存在。 _LocalSettingsRGOSetting 的实例吗? RGOSettingProfile 是什么?您是否正在尝试执行配置文件(多个命名配置集)之类的操作?
  • 是的,我有多个设置和多个设置。控件是动态添加到面板的,我需要添加一个处理程序来保存它。我在这里有图片:docs.google.com/document/d/…。我仍然需要添加第二部分,每个冠军都会生成另一个图标面板,您可以在其中选择/取消选择对象。您可以选择任何一个冠军,每个冠军都有一个相同选项的列表。我还添加了 RGOSettingProfile
  • 如果每个事物有 3 个按钮,则它们不需要是动态的 - 给定名称,它们在每种情况下都执行相同的操作。从用户数据中分离 UI 内容(数据中的某些内容可能会像某些文本或图像一样映射它们)。将数据链接到 Ui 的一种方法是创建用户控件。当传递其中一个对象时,它会相应地显示数据。
  • 那么按钮导致了错误?我认为它们必须是要序列化的属性。有没有其他方法可以解决这个问题?我将不得不研究用户控件,我只是喜欢制作自己的对象和东西。
  • 无论如何我都不想序列化按钮,也许我只会将它们设为私有并使用公共方法来设置处理程序。

标签: json vb.net self-reference


【解决方案1】:

我最终使用按钮执行此操作,它允许我保存对象:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-30
    • 2014-02-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多