C# JSON 轉 物件 並且依照物件陣列的特定屬性 排序 範例
C# JSON 轉 物件 並且依照物件陣列的特定屬性 排序 範例
資料來源: chatgpt
C#線上編譯: https://dotnetfiddle.net/
01.下列範例是將排序結果獨立成一個全新變數
using System; using System.Collections.Generic; using System.Text.Json; // System.Text.Json using System.Linq; public class Person { public string Name { get; set; } public int Age { get; set; } } class Program { static void Main() { string json = @"[ { ""Name"": ""Alice"", ""Age"": 30 }, { ""Name"": ""Bob"", ""Age"": 25 }, { ""Name"": ""Charlie"", ""Age"": 35 } ]"; // 反序列化 JSON 為物件 List<Person> List<Person> people = JsonSerializer.Deserialize<List<Person>>(json); // 輸出結果 foreach (var person in people) { Console.WriteLine($"{person.Name}, {person.Age}"); } Console.WriteLine(""); // 依照 Age 排序(遞增) //遞減排序:.OrderByDescending(p => p.Age) var sorted = people.OrderBy(p => p.Age).ToList(); // 輸出結果 foreach (var person in sorted) { Console.WriteLine($"{person.Name}, {person.Age}"); } } } /* Alice, 30 Bob, 25 Charlie, 35 Bob, 25 Alice, 30 Charlie, 35 */
02.如果要改變原本變數要如何實作
using System; using System.Collections.Generic; using System.Text.Json; public class Person { public string Name { get; set; } public int Age { get; set; } } class Program { static void Main() { string json = @"[ { ""Name"": ""Alice"", ""Age"": 30 }, { ""Name"": ""Bob"", ""Age"": 25 }, { ""Name"": ""Charlie"", ""Age"": 35 } ]"; List<Person> people = JsonSerializer.Deserialize<List<Person>>(json); // 輸出結果 foreach (var person in people) { Console.WriteLine($"{person.Name}, {person.Age}"); } Console.WriteLine(""); // 就地修改 people 的順序,依照 Age 遞增排序 //如果你要遞減排序,改成 b.Age.CompareTo(a.Age) people.Sort((a, b) => a.Age.CompareTo(b.Age)); // 輸出結果 foreach (var person in people) { Console.WriteLine($"{person.Name}, {person.Age}"); } } } /* Alice, 30 Bob, 25 Charlie, 35 Bob, 25 Alice, 30 Charlie, 35 */
03.先依 Age(年齡)排序(小的在前)&& 再依 Name(姓名)排序(字母序)[複合排序/多重排序]
using System; using System.Collections.Generic; using System.Text.Json; public class Person { public string Name { get; set; } public int Age { get; set; } } class Program { static void Main() { string json = @"[ { ""Name"": ""Alice"", ""Age"": 30 }, { ""Name"": ""Bob"", ""Age"": 25 }, { ""Name"": ""Charlie"", ""Age"": 30 }, { ""Name"": ""David"", ""Age"": 25 } ]"; List<Person> people = JsonSerializer.Deserialize<List<Person>>(json); // 輸出結果 foreach (var person in people) { Console.WriteLine($"{person.Name}, {person.Age}"); } Console.WriteLine(""); // 就地排序:先依 Age,再依 Name 排序 people.Sort((a, b) => { int ageCompare = a.Age.CompareTo(b.Age); if (ageCompare != 0) return ageCompare; return string.Compare(a.Name, b.Name, StringComparison.Ordinal); }); // 輸出結果 foreach (var person in people) { Console.WriteLine($"{person.Name}, {person.Age}"); } } } /* Alice, 30 Bob, 25 Charlie, 30 David, 25 Bob, 25 David, 25 Alice, 30 Charlie, 30 */
One thought on “C# JSON 轉 物件 並且依照物件陣列的特定屬性 排序 範例”
Gemini 使用Linq 來實作排序
using System;
using System.Collections.Generic;
using System.Text.Json;
using System.Linq;
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public string City { get; set; }
}
class Program
{
public static void Main(string[] args)
{
string jsonString = @"
[
{ ""Name"": ""Charlie"", ""Age"": 30, ""City"": ""London"" },
{ ""Name"": ""Alice"", ""Age"": 25, ""City"": ""New York"" },
{ ""Name"": ""Bob"", ""Age"": 35, ""City"": ""Paris"" }
]";
// 將 JSON 字串反序列化為 Person 物件的陣列並直接依照 Age 屬性進行排序 (由小到大)
Person[] sortedPeopleByAgeAscending = JsonSerializer.Deserialize(jsonString)
?.OrderBy(p => p.Age)
.ToArray();
Console.WriteLine("依照年齡 (由小到大) 排序:");
if (sortedPeopleByAgeAscending != null)
{
foreach (var person in sortedPeopleByAgeAscending)
{
Console.WriteLine($"姓名: {person.Name}, 年齡: {person.Age}, 城市: {person.City}");
}
}
else
{
Console.WriteLine("JSON 字串反序列化或排序失敗。");
}
Console.WriteLine("\n");
// 將 JSON 字串反序列化為 Person 物件的陣列並直接依照 Age 屬性進行排序 (由大到小)
Person[] sortedPeopleByAgeDescending = JsonSerializer.Deserialize(jsonString)
?.OrderByDescending(p => p.Age)
.ToArray();
Console.WriteLine("依照年齡 (由大到小) 排序:");
if (sortedPeopleByAgeDescending != null)
{
foreach (var person in sortedPeopleByAgeDescending)
{
Console.WriteLine($"姓名: {person.Name}, 年齡: {person.Age}, 城市: {person.City}");
}
}
else
{
Console.WriteLine("JSON 字串反序列化或排序失敗。");
}
Console.WriteLine("\n");
// 將 JSON 字串反序列化為 Person 物件的陣列並直接依照 Name 屬性進行排序 (字母順序)
Person[] sortedPeopleByName = JsonSerializer.Deserialize(jsonString)
?.OrderBy(p => p.Name)
.ToArray();
Console.WriteLine("依照姓名 (字母順序) 排序:");
if (sortedPeopleByName != null)
{
foreach (var person in sortedPeopleByName)
{
Console.WriteLine($"姓名: {person.Name}, 年齡: {person.Age}, 城市: {person.City}");
}
}
else
{
Console.WriteLine("JSON 字串反序列化或排序失敗。");
}
}
}