首页 > 编程语言 >C#对类所有属性进行排序并输出Json数据以及对Json数据进行排序

C#对类所有属性进行排序并输出Json数据以及对Json数据进行排序

时间:2022-11-24 17:55:20浏览次数:43  
标签:C# Value Json Key paramDic var new 排序

/// <summary>
/// 对自定义类进行升序排序,并输出Json字符串
/// </summary>
/// <example>
/// string json=JsonConvert.SerializeObject(new 自定义类名(){...}, new JsonSerializerSettings { ContractResolver = new SortContractResolver() });
/// </example>
/// <remarks>
/// 需要Newtonsoft.Json的包
/// </remarks>
public class SortContractResolver : DefaultContractResolver
{
    protected override IList<JsonProperty> CreateProperties(Type type, MemberSerialization memberSerialization)
    {
        IList<JsonProperty> properties = base.CreateProperties(type, memberSerialization);

        return properties.OrderBy(x => x.PropertyName).ToList();
    }
}

/// <summary>
/// 对自定义类进行升序排序
/// </summary>
/// <param name="obj">自定义类对象</param>
/// <returns></returns>
/// <example>
/// string json = JsonConvert.SerializeObject(GetSorObject(new 自定义类名(){...}));
/// </example>
/// <remarks>
/// 需要Newtonsoft.Json的包
/// </remarks>
private static dynamic GetSorObject(Object obj)
{
    if (obj is JArray)
    {
        var list = new List<dynamic>();
        foreach (var item in (obj as JArray))
        {
            list.Add(GetSorObject(item));
        }
        return list;
    }
    else
    {
        var paramDic = JsonConvert.DeserializeObject<Dictionary<string, dynamic>>(JsonConvert.SerializeObject(obj));
        var sortedDic = new SortedDictionary<string, dynamic>();
        for (int i = 0; i < paramDic.Count; i++)
        {
            if (paramDic.ElementAt(i).Value is JArray || paramDic.ElementAt(i).Value is JObject)
            {
                sortedDic.Add(paramDic.ElementAt(i).Key, GetSorObject(paramDic.ElementAt(i).Value));
            }
            else
            {
                sortedDic.Add(paramDic.ElementAt(i).Key, paramDic.ElementAt(i).Value);
            }
        }
        return sortedDic;
    }
}

/// <summary>
/// 对Json数据进行升序或降序
/// </summary>
/// <param name="json">Json数据</param>
/// <returns></returns>
/// <example>
/// string resultJson=StortJson(json);
/// </example>
/// <remarks>
/// 需要Newtonsoft.Json的包
/// 只能对根节点下的子节点进行排序,孙子节点不能被排序
/// </remarks>
public string StortJson(string json)
{
    var dic = JsonConvert.DeserializeObject<SortedDictionary<string, object>>(json);
    SortedDictionary<string, object> keyValues = new SortedDictionary<string, object>(dic);
    //var result = keyValues.OrderBy(m => m.Key);//升序 把Key换成Value 就是对Value进行排序
    var result = keyValues.OrderByDescending(m => m.Key);//降序

    //Dictionary<string, object> resultDic = new Dictionary<string, object>(); result.ToDictionary(x => x.Key, x => x.Value); 
    //foreach (var item in result)
    //{
    //    resultDic.Add(item.Key, item.Value);
    //}
    //简化为如下代码
    Dictionary<string, object> resultDic =result.ToDictionary(x => x.Key, x => x.Value);

    return JsonConvert.SerializeObject(resultDic);
}

 

标签:C#,Value,Json,Key,paramDic,var,new,排序
From: https://www.cnblogs.com/lgx5/p/16922705.html

相关文章

  • Java LocalDateTime类相关方法
    1.加减方法//localdatetime类型时间增加减少LocalDateTimelocalDateTime=LocalDateTime.now().plusSeconds(20);//当前时间加20秒Loca......
  • NFLS2022 CSP 模拟赛 21 A
    Link题解不会T1/hanx首先对\(S\)串KMP一波。假如我们已经填好了\(T\)的前\(i\)个字符,并设\(T_{1\simi}\)与\(S\)的相同长度前缀相等的最长后缀长度为\(......
  • 【CLS数据淘金第四期】网络流日志-云联网日志分析
    导语云联网(CloudConnectNetwork,CCN)云联网覆盖全球20+地域,提供云上私有网络间(VPC)、VPC与本地数据中心间(IDC)内网互联的服务,具备全网多点互联、路由自学习、链路选优及......
  • MassTransit - .NET Core 的分布式应用程序框架
    简介MassTransit是一个免费的、开源的.NET分布式应用程序框架。MassTransit使创建应用程序和服务变得容易,这些应用程序和服务利用基于消息的松散耦合异步通信来实现更......
  • jmeter-json获取多个返回值
    1、前提条件:·已安装jmeter并可以正常使用;·接口调试正常(正常请求);2、截图/源码:返回参数  JSON获取 ......
  • PHP htmlspecialchars()的用法
    htmlspecialchars()函数把一些预定义的字符转换为HTML实体。这个函数的效果其实在浏览器中打开页面是看不到的,要查看源代码才能看到。&(和号)成为&”(双引号)成为"’(......
  • JFinal整合spring的websocket
    在使用JFinal整合spring使用spring的websocket的时候,遇到了很多问题,下面介绍整合的全过程和要注意的点。(整个项目使用maven进行搭建,服务器用的是eclipse自带的jetty)1.整个po......
  • js判断是否是Json对象
    有两种方法1.使用正则表达式(推荐),代码如下:if(/^[\],:{}\s]*$/.test(text.replace(/\\["\\\/bfnrtu]/g,'@').replace(/"[^"\\\n\r]*"|true|false|null|-?\d+(?:\.\d*)?(?:[e......
  • CF1656E Equal Tree Sums Sol
    可以用归纳法解题。首先发现,删掉一个点,剩下的块数就是它的度数。不妨使得\(\suma_i=0\),一个点的点权等于其他所有点权的和的相反数。发现度数是相互提供的,则相邻的点......
  • mysql批量select插入
    基本用法如下INSERTINTOsg_questions_category(qid,categoryId)SELECTqid,6FROM`sg_questions`MySQL当记录不存在时插入(insertifnotexists)有两种方法:示例一:插入多......