2014-09-19 20 views
8

tarafından serileştirildiğinde sıranız bozulur. POCO nesnelerimde genellikle diğer POCO nesnelerini devralıyorum. JSON.NET kullanarak bir POCO nesnesini serileştirdiğimde, özelliklerin sırası çözülüyor.Mülklerin sırasını, JSON.NET

Demek, şöyle bir Kişi sınıf var: Ben Kişi sınıfından miras Çalışan sınıf var Sonra

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

:

Ben Çalışan sınıf serialize
public class Employee : Person 
{ 
    public int DepartmentId {get; set;} 
    public string Title {get; set;} 
} 

, benim JSON nesnesi şuna benzer:

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

İki soru:

  1. JSON nesne özelliklerimin sırası önemli mi?
  2. Özelliklerin sırası önemli değilse bile, özelliklerin doğru sırada olmasını nasıl sağlayabilirim, örneğin Kişi sınıfı özelliklerini, ardından Çalışan sınıfı özelliklerini görmek istiyorum.

Yardımlarınız için teşekkür ederiz.

cevap

13

1.) Hayır, sipariş önemli değil.

2.) kullanabilirsiniz [JsonProperty (Order = x)] sırasını kontrol etmek bağlıyor: 0 hızlıca denemek itibaren

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

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

, sipariş varsayılan, düşükten yükseğe doğru sıralanır edilir ve Aynı Sipariş değerine sahip mülkler isteğe göre sıralanır. bu gibi kullanmak sonra

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

ve: my Nesne zaten JObject beri

+0

Çok teşekkür ederim! – Sam

+0

Sözlük için nasıl kullanılır? genel kamu CountryInfo { public string Adı {get; set; } public int IsEnabled {get; set; } } public class Ülkeler { public Dictionary countriesInfo = new Dictionary (); } Ülkelere göre sıralamak istiyorumInfo.Name ?? –

0

Aslında, ben aşağıdaki çözümü kullanmak zorunda kaldı

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