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

/// <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#-Json-序列化对属性名排序
c#-Json-Json字符串字段递归排序
c# 对JSON字符串排序(KEY/VALUE)

C# JSON按key进行排序

c# – 使用.ToDictionary()
Order of serialized fields using JSON.NET

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C# 中,替换 JSON 数据的方法有很多种。以下是一些常用的方法: 1. 使用 Newtonsoft.Json 库 这是一个流行的第三方库,可以轻松地解析、创建和修改 JSON 数据。它包含了一些方便的方法来处理 JSON 数据,例如 JsonConvert.DeserializeObject() 和 JsonConvert.SerializeObject()。 以下是一个将某个属性值替换为新值的示例: ```csharp using Newtonsoft.Json.Linq; string jsonString = "{\"name\":\"John Smith\",\"age\":30,\"city\":\"New York\"}"; JObject jsonObject = JObject.Parse(jsonString); // 将 "age" 属性值替换为 35 jsonObject["age"] = 35; string newJsonString = jsonObject.ToString(); ``` 2. 使用 System.Text.Json 库 这是 .NET Core 3.0+ 中默认提供的库,用于处理 JSON 数据。它提供了类似于 Newtonsoft.Json 的一些方法,例如 JsonSerializer.Deserialize() 和 JsonSerializer.Serialize()。 以下是将某个属性值替换为新值的示例: ```csharp using System.Text.Json; string jsonString = "{\"name\":\"John Smith\",\"age\":30,\"city\":\"New York\"}"; JsonDocument jsonDocument = JsonDocument.Parse(jsonString); // 获取根元素 JsonElement rootElement = jsonDocument.RootElement; // 将 "age" 属性值替换为 35 rootElement.GetProperty("age").SetInt32(35); string newJsonString = rootElement.GetRawText(); ``` 3. 使用 JToken 类型 JToken 是 Newtonsoft.Json 库中的一个抽象基类,表示 JSON 数据中的一个节点。它可以表示 JSON 对象、JSON 数组、JSON 字符串、JSON 数值等各种类型。 以下是将某个属性值替换为新值的示例: ```csharp using Newtonsoft.Json.Linq; string jsonString = "{\"name\":\"John Smith\",\"age\":30,\"city\":\"New York\"}"; JToken jToken = JToken.Parse(jsonString); // 将 "age" 属性值替换为 35 jToken.SelectToken("age").Replace(35); string newJsonString = jToken.ToString(); ``` 以上是三种常用的替换 JSON 数据的方法,你可以根据自己的需求选择合适的方法。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值