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

C#如何反序列化复杂JSON结构为自定义类实例?

JSON反序列化为自定义对象的实现方案

下面用.NET生态里最常用的两个JSON处理库来实现,步骤直接清晰:

方案一:使用Newtonsoft.Json(Json.NET)

这是.NET平台老牌且流行的JSON处理库,操作步骤如下:

  1. 打开NuGet包管理器,搜索并安装Newtonsoft.Json包
  2. 编写反序列化代码:
using Newtonsoft.Json;
using System.Collections.Generic;

// 先将JSON内容转为字符串(如果是从文件读取,先把文件内容读入字符串即可)
var jsonContent = @"[
    {
        ""TimerDuration"": ""1"",
        ""UpdateDate"": ""a"",
        ""DataBinding"": [
            {
                ""Name"": ""a"",
                ""Path"": ""b""
            },
            {
                ""Name"": ""a"",
                ""Path"": ""b""
            }
        ]
    }
]";

// 反序列化为Settings对象的列表
var settingsList = JsonConvert.DeserializeObject<List<Settings>>(jsonContent);

// 也可以反序列化成数组形式
var settingsArray = JsonConvert.DeserializeObject<Settings[]>(jsonContent);

// 测试访问对象属性
foreach (var setting in settingsList)
{
    Console.WriteLine($"定时时长:{setting.TimerDuration}");
    foreach (var binding in setting.DataBinding)
    {
        Console.WriteLine($"绑定项:{binding.Name} -> {binding.Path}");
    }
}

方案二:使用System.Text.Json(.NET内置)

从.NET Core 3.0和.NET 5开始,微软内置了这个JSON处理库,无需额外安装包:

using System.Text.Json;
using System.Collections.Generic;

// 准备好JSON内容字符串
var jsonContent = @"[
    {
        ""TimerDuration"": ""1"",
        ""UpdateDate"": ""a"",
        ""DataBinding"": [
            {
                ""Name"": ""a"",
                ""Path"": ""b""
            },
            {
                ""Name"": ""a"",
                ""Path"": ""b""
            }
        ]
    }
]";

// 反序列化为Settings对象列表
var settingsList = JsonSerializer.Deserialize<List<Settings>>(jsonContent);

// 也可以反序列化成数组
var settingsArray = JsonSerializer.Deserialize<Settings[]>(jsonContent);

// 访问属性示例
foreach (var setting in settingsList)
{
    Console.WriteLine($"更新日期:{setting.UpdateDate}");
    foreach (var binding in setting.DataBinding)
    {
        Console.WriteLine($"绑定名称:{binding.Name},路径:{binding.Path}");
    }
}

关键注意事项

  • 你的JSON最外层是数组结构(用[]包裹),所以反序列化的目标类型必须是List<Settings>或者Settings[],不能直接用Settings,否则会抛出序列化异常。
  • 你的自定义类字段都是public修饰的,两个库默认都能自动匹配JSON键名和类字段名,无需额外加特性配置。如果后续遇到键名不匹配的情况,可以用[JsonProperty("键名")](Newtonsoft.Json)或[JsonPropertyName("键名")](System.Text.Json)来指定映射关系。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.01 02:56:14