Hallo,
für die einfache Speicherung von Einstellung in einem JSON-String hab ich mir eine kleine Klasse geschrieben, die ich euch auch zur Verfügung stellen will.
Spoiler anzeigen
Die Klasse benötigt Newtonsoft.Json.
Zur Verwendung
Ich hoffe, ihr könnt damit was anfangen
Nico
für die einfache Speicherung von Einstellung in einem JSON-String hab ich mir eine kleine Klasse geschrieben, die ich euch auch zur Verfügung stellen will.
VB.NET-Quellcode
- Imports Newtonsoft.Json.Linq
- Namespace Helpers
- Public Class JSONKeyValue
- Private data As JObject
- ''' <summary>
- ''' Gibt ein Objekt aus dem JSON aus
- ''' </summary>
- ''' <typeparam name="T">Objekttyp, als welches das Objekt ausgegeben werden soll</typeparam>
- ''' <param name="key">Key des Objektes</param>
- ''' <param name="standard">Standardwert, wird bei Fehler gesetzt und zurückgegeben</param>
- ''' <returns>Objekt aus dem JSON, bei Fehler standard</returns>
- Public Function getValue(Of T)(ByVal key As String, Optional ByVal standard As T = Nothing) As T
- Try
- Return data.SelectToken(key).ToObject(Of T)
- Catch ex As Exception
- setValue(Of T)(key, standard)
- Return standard
- End Try
- End Function
- ''' <summary>
- ''' Setzt einen Key auf Value oder fügt ihn hinzu.
- ''' </summary>
- ''' <typeparam name="T">Objekttyp des Objekts</typeparam>
- ''' <param name="key">Key des Objektes</param>
- ''' <param name="value">Value, auf das das Objekt im JSON gesetzt werden soll</param>
- Public Sub setValue(Of T)(ByVal key As String, ByVal value As T)
- Try
- data.SelectToken(key).Replace(JToken.FromObject(value))
- Catch
- If key.Contains(".") = False Then
- data.Add(key, JToken.FromObject(value))
- Else
- Dim actprob As JProperty = Nothing
- Dim dat() As String = key.Split("."c)
- For i As Integer = dat.Count - 1 To 0 Step -1
- If hasValue(String.Join(".", dat.Take(i + 1))) Then
- Dim jtoken As JToken = data.SelectToken(String.Join(".", dat.Take(i + 1)))
- jtoken.Last.AddAfterSelf(actprob)
- data.SelectToken(String.Join(".", dat.Take(i + 1))).Replace(jtoken)
- Exit For
- Else
- If actprob Is Nothing Then
- actprob = New JProperty(dat(i), value)
- Else
- Dim jo As New JObject
- jo.Add(actprob)
- Dim newprob As New JProperty(dat(i), jo)
- actprob = newprob
- End If
- If i = 0 Then
- data.Add(actprob)
- Exit For
- End If
- End If
- Next
- End If
- End Try
- End Sub
- ''' <summary>
- ''' Gibt zurück, ob der Key existiert
- ''' </summary>
- ''' <param name="key">Key des Objektes</param>
- ''' <returns>Angabe, ob das Objekt existiert</returns>
- Public Function hasValue(ByVal key As String) As Boolean
- Try
- Dim t As Object = data.SelectToken(key).ToObject(Of Object)
- Return True
- Catch
- Return False
- End Try
- End Function
- ''' <summary>
- ''' Entfernt einen Key aus dem JSON
- ''' </summary>
- ''' <param name="key">Key des zu entfernenden Objektes</param>
- Public Sub removeValue(ByVal key As String)
- data.Remove(key)
- End Sub
- ''' <summary>
- ''' Erstellt ein neues leeres KeyValue-JSON
- ''' </summary>
- Public Sub New()
- data = JObject.Parse("{}")
- End Sub
- ''' <summary>
- ''' Erstellt ein neues KeyValue aus einen JSON-String
- ''' </summary>
- ''' <param name="json">Der JSON-String, aus welchem das KeyValue-System erstellt werden soll</param>
- Public Sub New(ByVal json As String)
- data = JObject.Parse(json)
- End Sub
- ''' <summary>
- ''' Gibt den aktuellen JSON-String zurück
- ''' </summary>
- ''' <returns>aktuelles JSON</returns>
- Public Function toJson() As String
- Return data.ToString
- End Function
- ''' <summary>
- ''' Gibt das JObject aus, um es mit anderen Newtonsoft.Json-Funktionen zu verwalten
- ''' </summary>
- ''' <returns>JObject des aktuellen JSONs</returns>
- Public ReadOnly Property JSON As JObject
- Get
- Return data
- End Get
- End Property
- End Class
- End Namespace
Die Klasse benötigt Newtonsoft.Json.
Der Json-String muss in einem solchen Format vorliegen:
Hierbei ist die Verschachtelungstiefe erstmal egal.
Zuerst muss ein Objekt der Klasse erstellt werden:
Um nun zum Beispiel auf den Wert von "peter35" zuzugreifen, muss nun die folgende Methode aufgerufen werden:Hierbei ist False der Wert, der zurückgegeben wird, sollte kein Eintrag vorhanden sein.
Um einen Wert zu ändern, muss die folgende Methode aufgerufen werden:
Ob ein Wert vorhanden ist, kann so überprüft werden:
Ein Wert entfernt werden kann mittels
Um den "fertigen" JSON (bspw. zum Speichern) zu erhalten, kann die folgende Funktion verwendet werden:
Und zu guterletzt kann mittels der Property JSON ein JObject erhalten werden, um es mit anderen Newtonsoft.Json-Funktion weiterzuverarbeiten.
Hierbei ist die Verschachtelungstiefe erstmal egal.
Zuerst muss ein Objekt der Klasse erstellt werden:
Um nun zum Beispiel auf den Wert von "peter35" zuzugreifen, muss nun die folgende Methode aufgerufen werden:Hierbei ist False der Wert, der zurückgegeben wird, sollte kein Eintrag vorhanden sein.
Um einen Wert zu ändern, muss die folgende Methode aufgerufen werden:
Ob ein Wert vorhanden ist, kann so überprüft werden:
Ein Wert entfernt werden kann mittels
Um den "fertigen" JSON (bspw. zum Speichern) zu erhalten, kann die folgende Funktion verwendet werden:
Und zu guterletzt kann mittels der Property JSON ein JObject erhalten werden, um es mit anderen Newtonsoft.Json-Funktion weiterzuverarbeiten.
Ich hoffe, ihr könnt damit was anfangen
Nico