如何在C#中对JSON反序列化后的对象数组原地按属性排序
解决方法
核心问题分析
OrderByDescending不会修改原数组:它返回的是排序后的新枚举序列,原数组的元素顺序完全不变,所以你看不到效果。- 错误的
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
相关产品推荐
相关产品推荐

