2014-09-19 17 views
8

Trong các đối tượng POCO của tôi, tôi thường kế thừa từ các đối tượng POCO khác. Khi tôi sắp xếp một đối tượng POCO bằng cách sử dụng JSON.NET, thứ tự các thuộc tính sẽ bị rối tung lên.Thứ tự các thuộc tính bị rối tung lên khi được tuần tự hóa bởi JSON.NET

Nói, tôi có một lớp người đó trông như thế này:

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

Sau đó, tôi có một class Employee được thừa kế từ Person lớp:

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

Khi tôi serialize class Employee, tôi Đối tượng JSON trông giống như sau:

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

Hai câu hỏi:

  1. Thứ tự các thuộc tính đối tượng JSON của tôi có quan trọng không?
  2. Ngay cả khi thứ tự các thuộc tính không quan trọng, làm cách nào tôi có thể nhận được các thuộc tính theo đúng thứ tự, tức là tôi muốn xem thuộc tính lớp Person trước, sau đó là thuộc tính lớp nhân viên.

Cảm ơn sự giúp đỡ của bạn.

Trả lời

13

1.) Không, trật tự không quan trọng.

2.) Bạn có thể sử dụng [JsonProperty (theo thứ tự = x)] thuộc tính để kiểm soát trình tự:

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

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

Từ một thử nghiệm nhanh, giá trị mặc định để 0, được sắp xếp từ thấp đến cao, và các thuộc tính có cùng giá trị của Order được sắp xếp theo thứ tự tùy ý.

+0

Cảm ơn bạn rất nhiều! – Sam

+0

cách sử dụng cho từ điển ?? lớp công khai CountryInfo { chuỗi công khai Tên {get; bộ; } int công cộng IsEnabled {get; bộ; } } lớp công khai Quốc gia { từ điển công cộng countriesInfo = new Dictionary (); } tôi muốn sắp xếp theo quốc giaInfo.Name ?? –

0

Trên thực tế, kể từ khi đối tượng của tôi đã là một JObject, I Had để sử dụng các giải pháp sau đây:

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); 
    } 
} 

và sau đó sử dụng nó như thế này:

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

Các vấn đề liên quan