您的位置:首页 > Web前端 > JavaScript

为什么c#类生成json格式的次序是倒的?

2016-06-30 13:58 393 查看

最近碰到一个问题:

在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的属性放到最后才生成?谁能解释一下呢?
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  string json class