C#使用LitJson解析JSON文件与字符串实例教程
C#开发中常需处理JSON数据交换,使用LitJson配合实体类进行泛型映射是高效的解析方案。本文将详细讲解如何通过JsonMapper将JSON文件或字符串转换为对象结构,以及如何将对象还原为JSON字符串。
一、JSON基础概念与语法
JSON是一种轻量级的数据交换格式,采用完全独立于语言的文本格式。相较于XML,JSON体积更小且易于编写和解析。其核心规则包括:
- 数据以键值对形式存在(key: value)。
- 数据之间由逗号分隔。
- 花括号
{}保存对象,方括号[]保存数组。
一个简单的数组格式JSON示例如下:
[{"id":2,"name":"星河爆破","number":999},{"id":3,"name":"九星连珠","number":9}]
二、环境准备:引入JSON库
C#原生不支持高级JSON解析,通常需要借助第三方库。市面上主流的解析器包括LitJson、Newtonsoft.Json等。这里以LitJson为例,可通过NuGet包管理器安装依赖:
步骤:在解决方案资源管理器中右键“管理NuGet程序包”,搜索 LitJson 并安装。

安装完成后,在代码文件中添加引用:
using LitJson;
三、利用JsonMapper解析JSON文件
第1步:基础遍历解析JSON数组
适用场景:当JSON文件直接是一个数组时,可通过迭代 JsonData 集合逐条获取字段值。
操作入口:Console Application 项目。
动作说明:读取txt文件内容,将其转为 JsonData 类型后循环提取数据。
示例代码逻辑:
// 读取文件内容并转化为JsonData集合
JsonData jsonData = JsonMapper.ToObject(File.ReadAllText("json.txt"));
foreach (JsonData temp in jsonData)
{
// 通过索引获取具体字段的值
int id = Int32.Parse(temp["id"].ToString());
string name = temp["name"].ToString();
Console.WriteLine($"ID:{id}, Name:{name}");
}
此方法较为繁琐,每次均需手动转换数据类型。

第2步:使用自定义实体类简化映射
目的:避免手动解析每个字段,提高代码可读性与复用性。
动作说明:新建一个名为 Magic 的类,其属性名称必须与JSON中的Key保持一致。
public class Magic
{
public int id;
public string name;
public int number;
}
核心代码:在循环中实例化对象并赋值
List<Magic> magicList = new List<Magic>();
JsonData jsonData = JsonMapper.ToObject(File.ReadAllText("json.txt"));
foreach (JsonData temp in jsonData)
{
Magic m = new Magic();
m.id = Convert.ToInt32(temp["id"]);
m.name = temp["name"].ToString();
// ... 其他字段赋值
magicList.Add(m);
}
运行结果显示列表已成功填充对应的实体数据。

第3步:使用泛型批量解析JSON数组(推荐)
优势:利用 JsonMapper.ToObject<T> 泛型方法,可实现JSON到强类型数组或集合的直接自动映射,大幅缩减代码量。
关键参数:T 应指定为对应类型的数组 Magic[] 或泛型集合 List<Magic>。
完成状态:返回的对象可直接用于后续业务逻辑。
数组泛型解析:
Magic[] magicArray = JsonMapper.ToObject<Magic[]>(File.ReadAllText("json.txt"));
foreach(var item in magicArray) { /* 处理 */ }
运行结果一致。

集合泛型解析:
List<Magic> magicklist = JsonMapper.ToObject<List<Magic>>(File.ReadAllText("json.txt"));
同样得到正确结果。

第4步:解析复杂的嵌套JSON对象
当JSON整体为一个对象,且包含数组等子对象时,如物联网设备信息:
{
"status": 1,
"devicelist": [{
"productcode": "126345",
"devicecode": "15632478",
"url": "http://..."
}],
"apiId": "89757"
}
构建实体类策略:按照层级关系建立多个类。
IotDevice: 包含 status, apiId, 以及List<DevicelistItem> devicelist.DevicelistItem: 包含 productcode, devicecode, url.
解析动作:直接将该JSON内容解析为 IotDevice 对象即可。
IotDevice iotdevice = JsonMapper.ToObject<IotDevice>(File.ReadAllText("TextFile.txt"));
foreach(var item in iotdevice.devicelist) { /* 处理子列表 */ }
控制台输出验证了父子层级结构的完整提取。


四、对象反向转化为JSON字符串
除了读取文件,有时需要将内存中的C#对象序列化为JSON字符串以便传输或存储。
IotDevice device1 = new IotDevice();
device1.date = "2022/02/17";
device1.apiId = "89757";
// 调用 ToJson 静态方法
string jsonOutput = JsonMapper.ToJson(device1);
Console.WriteLine(jsonOutput);
生成的JSON文本符合标准格式,无多余空格或特殊字符干扰。

五、工具与排错建议
常见错误排查:
- 属性名不匹配: C#实体类中的属性大小写须与JSON键完全一致(区分大小写),否则解析结果为空或默认值。
- 路径错误: 本地运行时若找不到TXT文件,需确保文件存在于执行目录下或使用绝对路径。
辅助工具:
1. 在线校验JSON格式是否合法(如 json校验工具)。
2. 自动生成C#实体类模板(如 JSON转CSharp工具)。
以上就是C#使用LitJson库解析JSON文件及实体类映射的详细内容,更多关于C# JSON数据处理技巧的资料请关注本站其它相关文章!
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









