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

最近碰到一个问题:

在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的属性放到最后才生成?谁能解释一下呢?

猜你喜欢

转载自blog.csdn.net/hehuii/article/details/51789835
今日推荐