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

如何使用JINT从JS文件读取JSON对象并在.NET中序列化处理?

解决.NET中通过JINT序列化JS里JSON对象的问题

首先,咱们已经用JINT执行了包含那两个JSON对象的JS文件,接下来核心就是把JINT返回的Value对象转换成.NET可以直接操作的实体或者集合。我给你整理了两种常用的实现方式,一种是强类型实体类(推荐,有编译时检查),另一种是动态类型(适合结构不固定的场景)。

步骤1:定义对应的.NET实体类(强类型方案)

根据你JS里的结构,咱们可以定义匹配的类:

// 对应languages对象的结构
public class LanguageCollection
{
    public List<string> Languages { get; set; }
}

// labels是一个数组,每个元素是键值对,键是类似$JOB的标识,值是多语言列表
// 这里用Dictionary<string, List<string>>来接收每个元素,因为键可能不固定

步骤2:完整代码实现(用System.Text.Json)

using Jint;
using System.Text.Json;
using System.IO;

// 读取JS文件内容
var fileContents = File.ReadAllText("你的JS文件路径.js");

// 初始化JINT引擎并执行JS代码
var jsEngine = new Engine();
jsEngine.Execute(fileContents);

// 获取JS中的两个变量
var languagesJsValue = jsEngine.GetValue("languages");
var labelsJsValue = jsEngine.GetValue("labels");

// 将JINT的Value对象转换为JSON字符串
var languagesJson = languagesJsValue.ToJson();
var labelsJson = labelsJsValue.ToJson();

// 反序列化为.NET对象
var languages = JsonSerializer.Deserialize<LanguageCollection>(languagesJson);
var labels = JsonSerializer.Deserialize<List<Dictionary<string, List<string>>>>(labelsJson);

// 测试使用
Console.WriteLine($"第一个语言:{languages.Languages[0]}");
Console.WriteLine($"$JOB的德语翻译:{labels[0]["$JOB"][2]}");

备选方案:用动态类型(无需定义实体类)

如果你的标签键(比如$JOB、$JOB_NO)是动态变化的,不想定义实体类,可以直接转成动态对象:

using Jint;

// 前面步骤和上面一致
dynamic languagesDynamic = languagesJsValue.ToObject();
dynamic labelsDynamic = labelsJsValue.ToObject();

// 直接访问属性/元素
var cymraegLang = languagesDynamic.Languages[1];
var jobNumberWelsh = labelsDynamic[1].$JOB_NO[1];

注意事项

  • 如果你的项目用的是Newtonsoft.Json(Json.NET),只需要把反序列化的代码换成JsonConvert.DeserializeObject即可,用法和System.Text.Json基本一致。
  • JINT的ToJson()方法已经帮我们处理了JS对象到JSON字符串的转换,不需要手动拼接,避免格式错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:15:02