2014-09-19 63 views
8

在我的POCO對象中,我經常繼承其他POCO對象。當我使用JSON.NET序列化一個POCO對象時,屬性的順序變得混亂起來。由JSON.NET序列化時,屬性順序會搞亂

說,我有一個Person類,看起來像這樣:

public class Person 
{ 
    public int Id {get; set;} 
    public string FirstName {get; set;} 
    public string LastName {get; set;} 
} 

然後,我有一個從Person類繼承一個Employee類:

public class Employee : Person 
{ 
    public int DepartmentId {get; set;} 
    public string Title {get; set;} 
} 

當我序列Employee類,我JSON對象如下所示:

{ 
    "departmentId": 123, 
    "title": "Manager", 
    "id": 1234567, 
    "firstName": "John", 
    "lastName": "Smith" 
} 

兩個問題:

  1. 我的JSON對象屬性的順序是否重要?
  2. 即使屬性的順序並不重要,我怎麼能得到的屬性是正確的順序,即我想先看到Person類屬性,然後是Employee類屬性。

謝謝你的幫助。

回答

13

1.)不,訂單無關緊要。

2.)可以使用[JsonProperty(訂單= x)]的屬性來控制的順序:

public class Employee : Person 
{ 
    [JsonProperty(Order = 1)] 
    public int DepartmentId { get; set; } 

    [JsonProperty(Order = 1)] 
    public string Title { get; set; } 
} 

從快速測試,以便默認爲0,從低排序到高,並且具有相同Order的值的屬性按任意順序排序。

+0

非常感謝! – Sam 2014-09-19 04:11:32

+0

如何使用字典? public class CountryInfo { public string Name {get;組; } public int IsEnabled {get;組; } } public class Countries { public Dictionary countriesInfo = new Dictionary (); } 我想根據countriesInfo.Name進行排序? – 2016-12-08 06:55:08

0

實際上,因爲我的目標已經是一個JObject,我只好採用如下方案:

public class SortedJObject : JObject 
{ 
    public SortedJObject(JObject other) 
    { 
     var pairs = new List<KeyValuePair<string, JToken>>(); 
     foreach (var pair in other) 
     { 
      pairs.Add(pair); 
     } 
     pairs.OrderBy(p => p.Key).ForEach(pair => this[pair.Key] = pair.Value); 
    } 
} 

,然後用它是這樣的:

string serializedObj = JsonConvert.SerializeObject(new SortedJObject(dataObject));