C#:按值对 json 对象进行排序
Posted
技术标签:
【中文标题】C#:按值对 json 对象进行排序【英文标题】:C#: Sort json object by value 【发布时间】:2021-09-16 21:03:20 【问题描述】:我们如何在 json 下面按 'FieldName' 排序?就像按“FieldName”排序到 asc/desc。它是一个字符串值。
Json:
"Information": [
"FieldName": "Area04",
"Draft": "Unknown",
,
"FieldName": "Area02",
"Draft": "Unknown",
,
"FieldName": "Area01",
"Draft": "Unknown",
,
"FieldName": "Area03",
"Draft": "Unknown",
],
"OtherInfo": []
Code:
static void Main(string[] args)
string _json = "'Information': ['FieldName': 'Area04','Draft': 'Unknown','FieldName': 'Area02','Draft': 'Unknown','FieldName': 'Area01','Draft': 'Unknown','FieldName': 'Area03','Draft': 'Unknown'],'OtherInfo': []";
var jObj = JsonConvert.DeserializeObject<Informat>(_json);
var test1 = jObj.Information.OrderBy(x => x.FieldName);
string ss = JsonConvert.SerializeObject(test1);
Class:
public class Informat
public Information[] Information get; set;
public object[] OtherInfo get; set;
public class Information
public string FieldName get; set;
public string Draft get; set;
请检查并告诉我,订购它时我不会想到任何事情,我也尝试使用几个 stackover flow 答案,它不适用于我的 json 对象。我尝试使用上面的代码并得到异常'无法反序列化当前的 JSON 对象'。
【问题讨论】:
到目前为止,您自己尝试过什么?你遇到了什么问题?你研究了什么?简单的.OrderBy(e=>e.FieldName)
有什么不适用的?我推荐阅读how to ask a good question 和what's on topic。
@FranzGleichmann- 抱歉,我已经添加了我尝试使用的代码并得到异常“无法反序列化当前 JSON 对象”。我也尝试过其他代码,我已经丢失了它们并且无法回忆。请检查。
嗯,从您的错误消息来看,您的实际问题根本不是关于订购数据,而是关于反序列化您的字符串。另外:如果您的 string _json
包含实际内容(它与您进一步提供的内容不同),那么您的问题之一 - 它是 not 有效的 JSON(单引号)
@FranzGleichmann- 我已将单引号用于调试。我可以对 FieldName 进行排序,但我无法将其添加到整个 json 中。你能帮忙吗?
【参考方案1】:
你解决了这个问题吗?我已经复制了你的整个代码并运行,它可以正常工作!
public class Informat
public Information[] Information get; set;
public object[] OtherInfo get; set;
public class Information
public string FieldName get; set;
public string Draft get; set;
class Program
static void Main(string[] args)
string _json = "'Information': ['FieldName': 'Area04','Draft': 'Unknown','FieldName': 'Area02','Draft': 'Unknown','FieldName': 'Area01','Draft': 'Unknown','FieldName': 'Area03','Draft': 'Unknown'],'OtherInfo': []";
var jObj = JsonConvert.DeserializeObject<Informat>(_json);
var test1 = jObj.Information.OrderBy(x => x.FieldName);
string ss = JsonConvert.SerializeObject(test1);
// My Code to Check if the result is correct
var obj = JsonConvert.DeserializeObject<IEnumerable<Information>>(ss);
foreach (var item in obj)
Console.WriteLine($"item.FieldName : item.Draft");
【讨论】:
我可以排序,是的!但需要将其添加到整个 json 中。 @DeSon 在这种情况下,您应该初始化一个新的 Informat 类型对象,并将 Information 属性分配给有序列表,然后您可以再次序列化为 json以上是关于C#:按值对 json 对象进行排序的主要内容,如果未能解决你的问题,请参考以下文章