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

C#中将指定结构的JSON对象转换为JSON数组的最优方法

嘿,这个转换需求其实挺常见的,用C#里的主流JSON处理库就能高效搞定。下面给你两种最常用的方案,分别适配不同的项目场景:

使用 System.Text.Json(官方内置,推荐新项目)

如果你的项目基于 .NET Core 3.0+ 或者 .NET 5+,优先用这个方案——它是微软官方内置的JSON库,无需额外安装NuGet包,性能优异,还能和现代.NET生态完美兼容。

步骤实现:

  1. 先定义目标数据类型(让结构更清晰,维护性更强):
using System.Text.Json.Serialization;

public class TargetItem
{
    [JsonPropertyName("name")]
    public string Name { get; set; }
    
    [JsonPropertyName("id")]
    public int Id { get; set; }
    
    [JsonPropertyName("last")]
    public string Last { get; set; }
}

这里的JsonPropertyName属性是为了确保序列化后的JSON键是小写的name/id/last,和你要的结果完全匹配。

  1. 编写转换逻辑:
using System.Text.Json;
using System.Linq;

// 原始JSON字符串
string originalJson = @"{""Data1"": {""id"":1, ""last"":""0.00000045""}, ""Data2"": {""id"":2, ""last"": ""0.02351880""}}";

// 1. 把原始JSON反序列化为字典:键是Data1/Data2,值是对应的JSON元素
var dataDict = JsonSerializer.Deserialize<Dictionary<string, JsonElement>>(originalJson);

// 2. 遍历字典,构造目标数组
var targetArray = dataDict.Select(kv => new TargetItem
{
    Name = kv.Key,
    Id = kv.Value.GetProperty("id").GetInt32(),
    Last = kv.Value.GetProperty("last").GetString()
}).ToArray();

// 3. 序列化为最终的JSON数组字符串
string resultJson = JsonSerializer.Serialize(targetArray, new JsonSerializerOptions { WriteIndented = true });

// 输出结果
Console.WriteLine(resultJson);

如果只是简单场景不想定义类,也可以用匿名类型简化:

var targetArray = dataDict.Select(kv => new
{
    name = kv.Key,
    id = kv.Value.GetProperty("id").GetInt32(),
    last = kv.Value.GetProperty("last").GetString()
}).ToArray();
使用 Newtonsoft.Json(Json.NET,兼容性优先)

如果你的项目是老版本.NET Framework,或者已经在使用Newtonsoft.Json,那这个方案会更顺手——它的API更丰富,兼容性极强,是多年来的行业标准。

步骤实现:

  1. 先定义目标数据类型(同样用特性指定JSON键名):
using Newtonsoft.Json;

public class TargetItem
{
    [JsonProperty("name")]
    public string Name { get; set; }
    
    [JsonProperty("id")]
    public int Id { get; set; }
    
    [JsonProperty("last")]
    public string Last { get; set; }
}
  1. 编写转换逻辑:
using Newtonsoft.Json.Linq;
using System.Linq;

string originalJson = @"{""Data1"": {""id"":1, ""last"":""0.00000045""}, ""Data2"": {""id"":2, ""last"": ""0.02351880""}}";

// 1. 解析原始JSON为JObject
var jObject = JObject.Parse(originalJson);

// 2. 遍历JObject的所有属性,构造目标数组
var targetArray = jObject.Properties().Select(prop => new TargetItem
{
    Name = prop.Name,
    Id = prop.Value["id"].Value<int>(),
    Last = prop.Value["last"].Value<string>()
}).ToArray();

// 3. 序列化为最终的JSON数组字符串
string resultJson = JsonConvert.SerializeObject(targetArray, Formatting.Indented);

Console.WriteLine(resultJson);

方案选择建议

  • 新项目/现代.NET环境:选System.Text.Json,无依赖、性能好;
  • 老项目/已有Newtonsoft依赖:选Newtonsoft.Json,API熟悉、兼容性拉满。

这两种方案都是非常高效的实现,时间复杂度都是O(n)(n是原始JSON里的键值对数量),完全能满足常规场景的性能需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 06:44:53