C# 使用 JavaScriptSerializer 反序列化 JSON 字符串
在 C# Web 应用开发中,解析 API 返回的 JSON 字符串是常见需求。利用 .NET Framework 内置的 JavaScriptSerializer 类,开发者可以快速将 JSON 数据映射为 C# 对象,而无需安装 Newtonsoft.Json 等外部 NuGet 包。本文将演示如何构建对应的数据模型并完成反序列化。
准备条件与环境限制
JavaScriptSerializer 是微软早期提供的 JSON 处理工具,位于 System.Web.Script.Serialization 命名空间中。使用该方案必须确保项目引用了 System.Web.Extensions.dll 程序集,且主要适用于 .NET Framework 环境(如 .NET Framework 4.x)。对于较新的 .NET Core 或 .NET 5+ 项目,官方已不再推荐此方法,建议使用 System.Text.Json 或 Newtonsoft.Json。
操作步骤
第1步:分析 JSON 结构并定义实体类
目的:创建能够承载 JSON 数据的强类型容器。
原理:JavaScriptSerializer 在反序列化时会自动匹配属性名称与 JSON Key,且不区分大小写。
假设我们需要解析如下快递查询接口返回的数据结构:
{
"message": "ok",
"nu": "9356359685",
"state": "3",
"data": [
{
"time": "2014-09-01 21:19:06",
"context": "甘肃省武威市公司 已签收",
"ftime": "2014-09-01 21:19:06"
}
]
}
根据结构,我们需要定义两个类:PostalDeliveryModel(主对象)和 SingalData(数据项)。属性命名应尽可能贴近原 JSON Key 以利用自动映射特性。
using System;
using System.Collections.Generic;
namespace TestJson
{
// 根对象类,对应最外层的 JSON 结构
public class PostalDeliveryModel
{
// 公共属性名忽略大小写匹配 JSON Key
public string Message { get; set; }
public string Nu { get; set; }
public string State { get; set; }
// 嵌套列表对象
public List<SingalData> Data { get; set; }
}
// 子对象类,对应 data 数组中的每一项
public class SingalData
{
public DateTime Time { get; set; }
public string Context { get; set; }
public DateTime FTime { get; set; }
}
}
第2步:读取文件并执行反序列化
入口:C# Main 方法或业务逻辑调用处。
动作:初始化 JavaScriptSerializer 实例,调用 Deserialize<T> 方法。
在实际使用中,我们通常从文件或流中读取 JSON 字符串,然后将其转换为之前定义的模型对象。
using System;
using System.IO;
using System.Web.Script.Serialization; // 需引用 System.Web.Extensions
namespace TestJson
{
public class Program
{
public static void Main(string[] args)
{
// 1. 模拟读取本地 JsonData.txt 文件内容
string jsonStr = new StreamReader("JsonData.txt").ReadToEnd();
// 2. 创建序列化器并执行反序列化
var serializer = new JavaScriptSerializer();
PostalDeliveryModel model = serializer.Deserialize<PostalDeliveryModel>(jsonStr);
// 3. 验证数据是否成功加载
if (model != null)
{
Console.WriteLine($"快递公司编号: {model.Nu}");
Console.WriteLine($"物流状态码: {model.State}");
Console.WriteLine($"最新进度: {model.Data[0].Context}");
}
}
}
}
第3步:查看结果与内存对象
完成判断:调试运行后,model 变量中即包含了完整的结构化数据。可以通过 IDE 的监视窗口查看对象的层级关系和数值。
注意事项与排错
- 命名映射:
JavaScriptSerializer默认严格依赖属性名与 JSON Key 一致(不区分大小写)。如果 JSON 字段名含有特殊字符或不符合 C# 规范(如
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













