json.net: serialise Basisklassenmitglieder zuerst

9

Ich verwende json.net, um ein serialisiertes Objekt zu speichern, das ich gerne in einem Texteditor bearbeiten könnte. Ich habe eine Basisklasse, die den Namen des Objekts und dann eine Klasse enthält, die von diesem erbt und einige andere Eigenschaften hinzufügt.

Das Problem ist, dass die Eigenschaften so geschrieben sind, dass zuerst die Eigenschaften der abgeleiteten Klassen geschrieben werden und dann die Basisklasse afetr, also bekomme ich:

%Vor%

anstatt:

%Vor%

Sie können sehen, wie das ein bisschen schmerzt, wenn Sie eine Reihe von Feldern in der abgeleiteten Klasse haben und tatsächlich in einem Texteditor anzeigen / bearbeiten wollen!

Ich habe mich besonders mit dem Quellcode beschäftigt:

%Vor%

und

%Vor%

in ReflectionUtils.cs, um zu versuchen, die Reihenfolge umzukehren, sodass die Eigenschaften der Basisklasse an erster Stelle stehen, aber ich hatte noch keinen Erfolg. Fehle ich etwas Triviales?

    
steeveeet 11.11.2013, 14:50
quelle

2 Antworten

3

Ich glaube nicht, dass Sie den Code von JSON.Net ändern müssen, um das zu tun. Anscheinend können Sie es mit einem benutzerdefinierten Vertragsauflöser tun - durch Erben von DefaultContractResolver - wie in dieser Code von jemandem mit einem ähnlichen Problem auf json.net angezeigt wird Forum. Dieses Poster überschreibt CreateProperties und sortiert die Eigenschaften danach, wie stark der definierende Typ geerbt wird.

Der folgende Code basiert auf Code aus diesem Post (von LittleColin auf CodePlex). Dieser kompiliert, wird aber nicht getestet :

%Vor%

Siehe auch dieses Projekt für ähnlichen Code, der die zu serialisierenden Eigenschaften filtert.

    
sinelaw 11.11.2013, 15:10
quelle
1

Nur zur Ergänzung, ich habe einen anderen Ansatz vorgeschlagen, der anders ist als die angenommene Antwort mit [JsonProperty(Order = -2)] hier:

Reihenfolge der Felder beim Serialisieren der abgeleiteten Klasse in JSON.NET

    
Moshtaf 15.08.2017 09:32
quelle

Tags und Links