You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C#如何将排序后的sortedJson合并回原完整JSON对象jObj

解决方案

你不需要单独序列化排序后的数组再合并,直接操作已反序列化的强类型对象即可,这是最高效且不易出错的实现方式:

方案1:直接操作强类型对象(推荐)

你已经将完整JSON反序列化为Informat类型的jObj实例,只需要将排序后的结果直接赋值给Information属性,再重新序列化整个对象即可得到最终的完整JSON:

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);
    // 直接将排序后的结果赋值给Information属性,OrderBy返回IEnumerable,转成数组匹配属性类型
    jObj.Information = jObj.Information.OrderBy(x => x.FieldName).ToArray();
    // 直接序列化整个对象即可得到排序后的完整JSON
    string finalSortedJson = JsonConvert.SerializeObject(jObj, Formatting.Indented);
    // 输出验证
    Console.WriteLine(finalSortedJson);
}

方案2:基于现有sortedJson合并(不推荐,仅作参考)

如果你确实需要使用你已经生成的sortedJson做合并,可以通过Newtonsoft.Json的LINQ to JSON能力直接替换节点:

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);
    var sortedJson = JsonConvert.SerializeObject(test1);
    
    // 合并逻辑
    JObject rootJson = JObject.Parse(_json);
    JArray sortedInfoArray = JArray.Parse(sortedJson);
    rootJson["Information"] = sortedInfoArray;
    // 得到最终完整JSON
    string finalSortedJson = rootJson.ToString(Formatting.Indented);
}

两种方案最终输出的JSON都会按照FieldName升序排列Information数组的内容,且保留OtherInfo等其他节点不变。

内容的提问来源于stack exchange,提问作者DeSon

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 07:45:01