You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在C#中对JSON反序列化后的对象数组原地按属性排序

解决方法

核心问题分析

  1. OrderByDescending 不会修改原数组:它返回的是排序后的新枚举序列,原数组的元素顺序完全不变,所以你看不到效果。
  2. 错误的 Sort 调用:itemData 本身就是 Content[] 数组,没有 contents 属性;且C#数组没有实例化的 Sort 方法,必须通过 Array 类的静态方法排序。

可行方案

方案1:直接修改原数组顺序(无新对象创建)

使用 Array.Sort 静态方法,直接对原数组的元素顺序进行修改,不需要创建新数组或List,完全满足你后续序列化的需求:

// 按 Index 升序排序
Array.Sort(itemData, (i1, i2) => i1.Index.CompareTo(i2.Index));

// 按 Index 降序排序的话,调换比较顺序即可
Array.Sort(itemData, (i1, i2) => i2.Index.CompareTo(i1.Index));

调用后,editData.sections[x].contents 指向的仍是原数组,只是内部元素顺序已被排序,后续序列化时会直接输出排序后的结果。

方案2:生成新数组替换原引用(若允许创建新数组)

如果你只是禁止创建List,允许创建新数组的话,也可以用LINQ的排序方法生成新数组后赋值回去:

// 升序
editData.sections[x].contents = itemData.OrderBy(c => c.Index).ToArray();

// 降序
editData.sections[x].contents = itemData.OrderByDescending(c => c.Index).ToArray();

这种方法会创建新数组,但不会创建List,后续序列化同样能得到正确的排序结果。

内容的提问来源于stack exchange,提问作者Saturn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 13:21:12