Sweep Gson fügt Gson (Un-) Wrapping-Funktionalität hinzu, ohne das vorhandene Verhalten zu ändern.
Download
Dependencies {
Implementierung ' io.saeid.sweep: sweep-gson: 1.0.0 '
}
Verwendung
GsonBuilder (). withSweep (). create ()
Wenn Sie weitere erweiterte Funktionen benötigen:
GsonBuilder
(). WithSweep {
defaultWrapper = ... // optional
defaultUnwrapper = ... // optional
Haken = ... // optional
} .create ()
SweepWrapper
Verwenden Sie die Annotation @SweepWrapper
um das Objekt während der Serialisierung mit dem gewünschten Wert zu umbrechen.
@SweepWrapper ( ") "
)
Daten Klasse Anfrage ( Wert Name : String )
Die Ausgabe nach Serialisierung der obigen Klasse:
{
" Anfrage "
: {
" Name " : " your_value "
}
}
Verschachtelter Zeilenumbruch
@SweepWrapper
unterstützt auch verschachtelten Zeilenumbruch mit Punkt als Trennzeichen:
Wenn Sie beispielsweise den Wert im obigen Beispiel durch @SweepWrapper ("request.data") ersetzen )
Es wird erzeugen:
{
" Anfrage "
: {
" Daten "
: {
" Name " : " your_value "
}
}
}
Custom / Default Wrapping
Wenn Sie den Klassennamen als Wrapper-Wert verwenden möchten, können Sie einfach @SweepWrapper (USE_CLASS_NAME_WRAPPER)
.
USE_CLASS_NAME_WRAPPER [1945EinreserviertesWortdas
@SweepWrapper
zwingt, den Klassennamen (dekapitalisierte Version) als Wrapper-Namen zu verwenden.
Beispiel:
@SweepWrapper ( USE_CLASS_NAME_WRAPER
)
Daten Klasse Anforderung ( Wert Name : Zeichenfolge )
{
" Anfrage "
: {
" Name " : " your_value "
}
}
Sie können auch den Wert @SweepWrapper
zur Laufzeit definieren, indem Sie defaultWrapper
überschreiben.
GsonBuilder
(). WithSweep {
defaultWrapper = Objekt : DefaultWrapper
{
überschreiben Spaß < T > wrapWith ( value : T ) : [19659021] String?
{
return " request. $ USE_CLASS_NAME_WRAPPER "
}
}
} .create ()
Hinweis: Standardmäßig wechselt @SweepWrapper
zum defaultWrapper
wenn Sie keinen Wert übergeben.
SweepUnwrapper
Verwenden Sie die Annotation @SweepUnwrapper
um das Objekt während der Deserialisierung mit dem gewünschten Wert zu entpacken. Im Gegensatz zu @SweepWrapper
funktioniert @SweepUnwrapper
nur mit dem Stammobjekt.
{
" Antwort "
: {
" Name " : " your_value "
}
}
Der obige JSON kann beispielsweise für die folgende Klasse deserialisiert werden:
@SweepWrapper ( " Antwort "
)
Daten Klasse Antwort ( Wert Name : Zeichenfolge )
Verschachteltes Auspacken
@SweepUnwrapper
ebenfalls Unterstützt verschachteltes Auspacken mit Punkt als Trennzeichen:
Wenn Sie beispielsweise den Wert im obigen Beispiel durch @SweepUnwrapper ("response.body")
ersetzen, kann er vom folgenden JSON extrahiert werden: [19659023] {
" Antwort " : {
" Körper " : {
" Name " : " your_value "
}
}
}
Benutzerdefiniertes / Standard-Auspacken
Wie @SweepWrapper
unterstützt es USE_CLASS_NAME_UNWRAPPER
.
Sie können auch den @SweepUnwrapper
-Wert bei durch Überschreiben von defaultUnwrapper
.
GsonBuilder
(). withSweep {
defaultUnwrapper = Objekt : DefaultUnwrapper
{
Überschreiben Spaß < T > Auspacken mit ( Typ : Klasse < T ]>) : Zeichenfolge? = null
}
überschreiben Spaß erzwingen () : Boolean = true
} .create ()
@SweepUnwrapper
unterstützt auch den Force-Modus. Dies bedeutet, dass alle Objekte entpackt werden, wenn sie während der Deserialisierung nicht mit @SweepUnwrapper
kommentiert werden.
] Wenn Sie den Force-Modus für einen bestimmten Typ deaktivieren möchten, können Sie einfach null
übergeben.
Hinweis: Standardmäßig wechselt @SweepUnwrapper
zu defaultUnwrapper
Wenn Sie keinen Wert übergeben.
startsWith / endsWith
@SweepUnwrapper
unterstützt auch einen einfachen Start- / End-With-Regex.
@SweepUnwrapper ("* Antwort ")
Es wird alles ausgepackt, was mitAntwort
endet, zsingleResponse
@SweepUnwrapper ("response *")
Es wird alles entpackt, was mitresponse
beginnt, z.responseValue
Hooks
Sweep Gson ermöglicht das Hinzufügen eines Objekts zum Root-Element vor der Serialisierung durch Überschreiben der Methode addToRoot
von Hooks
: [19659010] GsonBuilder (). WithSweep {
Haken = Objekt : Haken {
überschreiben Spaß < T > addToRoot ( value : T ) : [19659020] Pair < String Beliebig >? {
Rückgabe Paar ( " Eigenschaften " Eigenschaften (...)
}
}
} .create ()