C# 使用 JavaScriptSerializer 反序列化 JSON 字符串

Evan
Evan
发布时间:2026-10-15 | 6人浏览过
原创

在 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# 规范(如
相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表