在我的POCO对象中,我经常从其他POCO对象继承。当我使用JSON.NET序列化POCO对象时,属性的顺序全部搞砸了。
说,我有一个看起来像这样的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"
}
两个问题:
感谢您的帮助。
答案 0 :(得分:13)
1。)不,订单并不重要。
2.)您可以使用[JsonProperty(Order = x)]属性来控制订单:
public class Employee : Person
{
[JsonProperty(Order = 1)]
public int DepartmentId { get; set; }
[JsonProperty(Order = 1)]
public string Title { get; set; }
}
从快速测试开始,订单默认为0,从低到高排序,具有相同Order值的属性按任意顺序排序。
答案 1 :(得分:0)
实际上,由于我的Object已经是一个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))
;