Wie kontrolliere ich die Reihenfolge der Eigenschaften in meiner JSON-Ausgabe?


6

Ich habe eine Klasse namens DataItem mit drei Eigenschaften: Id, DataValue und CreatedDateTime. Die Eigenschaften sind in der Reihenfolge von oben nach unten in der Klasse definiert. Dies ist auch die Reihenfolge, in der ich die Eigenschaften in meinem JSON-Export sehen möchte. Das Problem ist, dass die Eigenschaften im DataItem-Objekt und im JSON-Export in alphabetischer Reihenfolge sortiert sind. Obwohl mit diesem Format nichts technisch falsch ist, ist es eine Frage der Lesbarkeit. Wie kontrolliere ich die Reihenfolge der Eigenschaften im JSON-Export?

Ich überprüft das DataItem Wen instanziiert und die Eigenschaften sind in alphabetischer Reihenfolge aufgeführt. Das ist in Ordnung, ich verstehe die möglichen Usability-Probleme nicht alphabetisch zu sortieren.

Diese Methode ist in meiner Service-Implementierung und gibt die Liste der DataItems zurück. Ich denke, ich muss hier etwas tun, aber nicht sicher, was oder wie.

public List<DataItem> GetCollection() 
{ 
    return DataRetriever.GetAllDataItems(); 
} 
  0

Warum zeigen Sie uns viele irrelevanten Code und zeigen nicht den Code, der wichtig ist, d.h. wo Sie Ihr Objekt zu JSON serialisieren? Auch warum ist die Bestellung für Sie wichtig? JSON soll in erster Linie von anderen Programmen gelesen werden, nicht von Menschen. 15 feb. 122012-02-15 02:46:54

  0

@svick - Es gibt nicht viel Code zum Anzeigen. Ob es relevant ist oder nicht, das haben wir. Ich serialisiere nichts, um nichts zu zeigen. Soweit die Reihenfolge, das ist genau das, was wir wollen. Sehen Sie sich die WCF-REST-Multiprojektvorlage an, da dies im Grunde das ist, was wir tun. 15 feb. 122012-02-15 03:26:07

+1

mögliches Duplikat von [WCF DataContract DataMember Bestellung?] (Http://stackoverflow.com/questions/3816478/wcf-dataccontract-datamember-order) 25 jun. 152015-06-25 13:57:23

17

Die DataContractJsonSerializer berücksichtigt das DataMember Attribut, das eine Order Eigenschaft hat. Sie können es verwenden, um dem Serializer die Reihenfolge der Mitglieder mitzuteilen, die Sie serialisieren möchten.

[DataContract] 
class DataItem 
{ 
    [DataMember(Order = 1)] 
    public string Id { get; set; } 

    [DataMember(Order = 2)] 
    public string DataValue { get; set; } 

    [DataMember(Order = 3)] 
    public string CreatedDateTime { get; set; } 
} 

Passen Sie die Bestellung je nach Bedarf, aber dies ist in der Regel, wie es in WCF gemacht wird.

+1

Schöne, einfache Lösung. Vielen Dank! 16 feb. 122012-02-16 00:37:39

+1

[DataContract] oben Klassenname ist muss. Vielen Dank 17 mai. 162016-05-17 20:13:06


1

Ich glaube nicht, beide DataContractJsonSerializer und JSON.NET Feld unterstützt, um.

Sie können JSON-String selbst konstruieren, wenn Objekt so einfach ist wie nur 3 Felder.