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=&gt;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 对象进行排序的主要内容,如果未能解决你的问题,请参考以下文章

按值对 JSON 进行排序

按值对 JSON 进行排序 [重复]

如何在PHP中按值对对象数组进行排序

Firebase 按值对类数组进行排序

我有不同的类,我想用这些类中的对象制作一个向量并按值对其进行排序

如何按值对 STL 映射进行排序?