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 字串反序列化或排序失敗。");
}
}
}