JavaScriptSerializer在.NET Core项目中不被允许使用?

40

我正在 .NET Core 项目中工作。我想使用 JavaScriptSerializer 将对象序列化。

JavaScriptSerializer Serializer = new JavaScriptSerializer();

我添加了命名空间using System.Web.Script.Serialization;。它会抛出错误。我在谷歌上搜索了一下。我发现像.NET Core项目在某些网站上没有System.Web.Script.Serialization;

是否有其他方法可以像JavaScriptSerializer一样序列化.NET Core中的对象?

3个回答

60
在 .net core 中,序列化和反序列化对象(JSON)的最常见方法是使用 Newtonsoft.Json。您需要安装 Newtonsoft.Json 的 Nuget 包。添加一个如下的 using 语句:
using Newtonsoft.Json;

然后将其用作:

object o = JsonConvert.DeserializeObject(json1);
string json2 = JsonConvert.SerializeObject(o, Formatting.Indented);

如何将字符串(JSON格式)转换为字符串列表:{"result":["PRE_VPN_Usuarios","PRE_Usuarios COMUNICADOS MAD","PRE_Campaña Agentes MAD"]} - Kiquenet

20
对于ASP.NET Core 3.1,我们可以使用JsonSerializer.DeserializeSystem.Text.Json中使用string/dynamic字典Dictionary<string, dynamic>
例如,加载ClientApp\package.json
using System;
using System.Text.Json;
using System.Collections.Generic;

...

var packageJson = File.ReadAllText(Path.Combine(env.ContentRootPath, "ClientApp", "package.json"));

var packageInfo = JsonSerializer.Deserialize<Dictionary<string, dynamic>>(packageJson);

Console.WriteLine("SPA Name: {0}, SPA Version: {1}", 
    packageInfo["name"], packageInfo["version"]);

当然,我们需要使用 Target > Copy 命令在 .csproj 中将 ClientApp\package.json 复制到发布目录中。请保留 HTML 标签。

这几乎可以工作,但是嵌套的元素是JsonElement类型而不是Dictionary<string, dynamic>,无法通过字符串进行索引。 - Dave Cousineau
@DaveCousineau 的确,说得好;这主要是为了快速访问平面级别的属性;对于更复杂的情况和当我们需要访问嵌套元素时,我认为最好创建一个适当的接口/类,并将其用作反序列化器的通用类型。 - Christos Lytras

4
安装 Newtonsoft.Json,然后在控制器中:
string data = JsonConvert.SerializeObject(new { MyUser = user, MyId = id });
object dataObj = JsonConvert.DeserializeObject(data);
return Json(dataObj);

并且在Javascript文件中:

$.ajax({
   // some codes!
   success: function(data){
      var user = data.MyUser;
      var id = data.MyId
   }
});

Json(dataObj) 是什么? - Kiquenet

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接