如何使用 System.Text.Json 对序列化字段进行排序

How to sort serialized fields using System.Text.Json

我想用 System.Text.Json 对序列化属性进行排序。其实我想先放一个属性(ID)

关注我的控制台应用程序。

class Program
{
    static void Main(string[] args)
    {            
        Student student = new Student()
        {                
            Name = "Robert",
            Id = Guid.NewGuid(),
            LastName = "Alv",
            Check = "Ok"
        };

        var resultJson =  System.Text.Json.JsonSerializer.Serialize(student);
        Console.WriteLine(resultJson);
        Console.ReadLine();
        
    }
    class BaseClass1
    {            
        public Guid Id { get; set; }
    }

    class BaseClass2 : BaseClass1
    {
        
    }

    class People : BaseClass2
    {            
        public string Name { get; set; }
        public string LastName { get; set; }
        public string Check { get; set; }
    }

    class Student : BaseClass2
    {            
        public string Name { get; set; }
        public string LastName { get; set; }
        public string Check { get; set; }
    }       
}

  

上面程序的结果是 {"Name":"Robert","LastName":"Alv","Check":"Ok","Id":"4bd17c0c-f610-414d-8f6c- 49ca8957ef3f"}

但我想要下面的结果

{"Id":"4bd17c0c-f610-414d-8f6c-49ca8957ef3f","Name":"Robert","LastName":"Alv","Check":"Ok"}

阅读@AlexeiLevenkov 指出的线程whosebug.com/questions/3330989 后。我意识到使用 NewtonSoft.Json 更容易。所以我将属性 [JsonProperty(Order = -2)] 设置为“ID” 属性 并将 System.Text.Json.JsonSerializer.Serialize(student) 交换为 JsonConvert.SerializeObject(student);它工作正常!

下面是更新的代码。

class Program
{
    static void Main(string[] args)
    {            
        Student student = new Student()
        {                
            Name = "Robert",
            Id = Guid.NewGuid(),
            LastName = "Alv",
            Check = "Ok"
        };

        var resultJson =  JsonConvert.SerializeObject(student);
        Console.WriteLine(resultJson);
        Console.ReadLine();
        
    }
    class BaseClass1
    {
        [JsonProperty(Order = -2)]
        public Guid Id { get; set; }
    }

    class BaseClass2 : BaseClass1
    {
        
    }

    class People : BaseClass2
    {            
        public string Name { get; set; }
        public string LastName { get; set; }
        public string Check { get; set; }
    }

    class Student : BaseClass2
    {            
        public string Name { get; set; }
        public string LastName { get; set; }
        public string Check { get; set; }
    }       
}

无法使用 System.Text.Json(目前)。据说在“某天”发布的作品中。

如您所见,Newtonsoft.Json 是可能的。