2016-06-22 10 views
0

Ich bin mit Entity Framework Core und die generierte Klasse seine eigenen Eigenschaften hat, dhGibt es eine Möglichkeit, die Reihenfolge der Eigenschaften in JSON-Objekten zu steuern?

DataModel.Agent.cs

public partial class Agent { 

    public virtual decimal Id 
    { 
     get; 
     set; 
    } 

    public virtual string Name 
    { 
     get; 
     set; 
    } 
} 

Aber ich andere Eigenschaften benötigen, so erkläre ich sie in einem anderen Datei:

Agent.CS

public partial class Agent 
{ 
    [NotMapped] 
    public dynamic Custom { get; set; } 
} 

Das Problem ist, dass Agent.cs vor DataModel.Agent.cs kompiliert wird, so dass der Compiler Eigenschaften in dieser Reihenfolge generiert: Benutzerdefiniert, ID, Name und der resultierende JSON ist seltsam.

Ich möchte es sein: Id, Name, Custom. Mit anderen Worten, ich möchte immer, dass die DataModel-Klasse zuerst kommt.

EDIT: Nur um zu verdeutlichen, das einzige Ziel ist es, die JSON schöner zu machen, indem immer die Id zuerst, die ein sehr häufiges Muster ist. Dies hat absolut keinen Einfluss auf die Funktionsweise der Anwendung.

Gibt es eine Möglichkeit, den Compiler zu zwingen, immer zuerst eine der Dateien zu kompilieren?

+2

Dies gilt JSON Eigentumsordnung soll nicht gezählt werden. –

+0

Json-Objekte werden als Wörterbücher serialisiert. Dictionary Keys haben keine inhärente Reihenfolge –

+0

Was meinst du mit "das resultierende JSON ist komisch"? Objekte werden als Wörterbücher in JSON serialisiert und weisen keine eigene Reihenfolge auf. Ein Wörterbuch mit ID, Name, Benutzerdefiniert ist * äquivalent * zu einem anderen mit ID, Benutzerdefiniert, Name, wenn sie die gleichen Werte haben –

Antwort

4

Nun, Sie wirklich nicht auf JSON Eigenschaft zählen sollte, aber wenn mit json.net

public class Account 
{ 
public string EmailAddress { get; set; } 

// appear last 
[JsonProperty(Order = 1)] 
public bool Deleted { get; set; } 

[JsonProperty(Order = 2)] 
    public DateTime DeletedDate { get; set; } 

    public DateTime CreatedDate { get; set; } 
    public DateTime UpdatedDate { get; set; } 

    // appear first 
    [JsonProperty(Order = -2)] 
    public string FullName { get; set; } 
} 

http://www.newtonsoft.com/json/help/html/JsonPropertyOrder.htm

+0

Nicht genau, was ich gesucht habe, die die ganze Datei bestellt, aber es hat mein Problem gelöst. Vielen Dank! –

+0

Ich bin nicht 100% sicher und VS möglicherweise am Ende neu ordnen sie automatisch, aber versuchen Sie die Reihenfolge der Dateien in Ihrer .csproj Dateien ItemGroup, die alle Kompilier-Tags enthält, ich glaube, Build wird nur lesen sie aus dem csproj in die Reihenfolge, in der sie sich befinden. Für die .Net-Dateikompilierreihenfolge ist außerhalb des Projektauftrags für Referenzen irrelevant. –

+0

Der Schlüssel zum Verständnis ist folgender: "MSBuild-Projektdateistandard bietet Ihnen eine deklarative Sprache, die verwendet wird, um Erstellungsregeln zu formulieren, nicht Imperativ" - dh Reihenfolge spielt keine Rolle. –

Verwandte Themen