最近碰到一个问题:
在C#里生成json格式字符串的时候,发现生成出来的顺序是颠倒的,如下图中的类:
public class Person
{
public string name{get;set;}//姓名
public int age{get;set;} //年龄
public bool sex_is_male{get;set;} //性别
public struct Partner //伙伴
{
public string partner_name{get;set;} //伙伴姓名
public int partner_age{get;set;} //伙伴年龄
public bool partner_sex_is_male{get;set;} //伙伴性别
}
public Partner partner;
public string[] achievement; //成就
}
//设置一个Person类
Person p = new Person();
p.name = "Tsybius";
p.age = 23;
p.sex_is_male = true;
p.partner.partner_name = "Galatea";
p.partner.partner_age = 21;
p.partner.partner_sex_is_male = false;
p.achievement = new string[] { "ach1", "ach2", "ach3" };
//直接输出
Console.WriteLine("Formatting.None:");
string json1 = JsonConvert.SerializeObject(p);
Console.WriteLine(json1 + "\n");
生成的结果如下:
{"partner":{"partner_name":"Galatea","partner_age":21,"partner_sex_is_male":false},"achievement":["ach1","ach2","ach3"],"name":"Tsybius","age":23,"sex_is_male":true}
百思不得其解,百度以后,发现一篇文章里,类的声明与我不同,是如下结构:
public class Person
{
public string name; //姓名
public int age; //年龄
public bool sex_is_male ; //性别
public struct Partner //伙伴
{
public string partner_name;//伙伴姓名
public int partner_age ; //伙伴年龄
public bool partner_sex_is_male; //伙伴性别
}
public Partner partner;
public string[] achievement; //成就
}
赶紧试了一下,问题解决了!如下输出:
{“name”:”Tsybius”,”age”:23,”sex_is_male”:true,”partner”:{“partner_name”:”Galatea”,”partner_age”:21,”partner_sex_is_male”:false},”achievement”:[“ach1”,”ach2”,”ach3”]}
原因也说不清楚,不知道为什么会把封装setget的属性放到最后才生成?谁能解释一下呢?