如何在VSCode中将`System.Web.Extensions`程序集添加到.NET Core项目

24
我已经在 vscode(版本为 1.15.0)中安装了 C# 支持,并通过“dotnet new console”创建了 HelloWorld 项目。现在,在 Program.cs 中,我想使用依赖于 System.Web.Extensions 程序集的 JavaScriptSerializer 类。我键入了 "using System.Web.Script.Serialization;" 并运行了 "dotnet restore" 命令,但是 vscode 无法解析它,出现以下错误信息:“The type or namespace name 'Web' does not exist in the namespace 'System' (are you missing an assembly reference?)”。看来“System.Web”不是 .net core 的一部分,但是否有任何方法将该程序集添加到项目中?由于它是一个 csproj 项目,因此我无法找到其他帖子中提到的“project.json”文件。

2
为什么不使用Newtonsoft.Json进行序列化? - koelkastfilosoof
@koelkastfilosoof 实际上我正在使用 Newtonsoft.Json 进行序列化。我只想知道如何添加程序集。 - 39ecneret
请记得给有帮助的答案点赞,并接受解答以标记此问题已解决。 - poke
4个回答

22

System.Web.Extensions是完整的.NET框架的一部分。 如果您想对对象进行序列化和反序列化,则可以使用Newtonsoft.Json

#using Newtonsoft.Json
....
JsonConvert.DeserializeObject(json);

更新

只需从NuGet获取软件包名称和版本号,然后将其添加到.csproj文件中并保存。您将被提示运行还原操作以导入新的软件包。

<ItemGroup>
     <PackageReference Include="Newtonsoft.Json" Version="9.0.1" />
  </ItemGroup>

2
但是我想知道如何在 VS Code 中添加类似于 System.Web.Extensions 等的程序集。 - 39ecneret
1
你可以使用dotnet cli命令:dotnet add package Newtonsoft.Json。 - santosh singh
3
请勿使用“System.Web”。.Net Core旨在实现跨平台。而“System.Web”是Windows原生的。正如Santosh所指出的那样:请使用Json.Net。 - Marco
感谢@santoshsingh的更新。我尝试了你的代码并且做出来了。控制台给出了 Package Microsoft.EntityFrameworkCore 2.0.0 is not compatible with netcoreapp1.1(.NETCoreApp,Version=v1.1). Package Microsoft.EntityFrameworkCore 2.0.0 supports: netstandard2.0 (.NETStandard,Version=v2.0) One or more packages are incompatible with .NETCoreApp,Version=v1.1.,这是@marco和@poke解释过的不兼容问题。 - 39ecneret
@santoshsingh 多个目标框架会解决 OP 的问题吗? - ManirajSS

10

我只是想知道如何添加程序集。

通常,在您的.csproj中会有像这样的节点:

<Reference Include="System.Web.Extensions" />

然而,由于您正在使用.NET Core,因此您无法引用针对完整 .NET Framework 的程序集。在这种情况下,System.Web.Extensions 就是其中之一,因此您不能在 .NET Core 项目中使用它。


@poke 多个目标框架能解决 OP 的问题吗? - ManirajSS
@ManirajSS 当然可以,但是这样你仍然没有在.NET Core中使用.NET Framework程序集。当你的目标是.NET Framework时,你会使用.NET Framework程序集,并且在将目标设置为.NET Core时仍然需要弄清楚该怎么做。 - poke
@poke 我想在一个文件中同时针对 .net core 2.0 和 net40。所有其他文件都必须在 .net core 2.0 上工作。我试图避免在除了那个多框架文件之外的其他文件中使用 #if #endif。 - ManirajSS
1
@ManirajSS 是的,你可以这样做,但是你需要为 .NET Core 目标提供一些适当的“回退”方案。如果你需要帮助,请随时打开一个新问题并将其链接给我。 - poke
@poke re "多个目标框架是否能解决 OP 的问题?" 这取决于情况。如果目标是完整的 .NET 框架,那么可能会起作用。但如果其中一个或多个目标是 netstandard,则不行。 - Manfred

2

System.Web.Extensions.Serialization替换为System.Text.Json.Serialization。这两者的使用方法非常相似。


-6

dotnet restore

dotnet restore - 恢复项目的依赖项和工具。

dotnet restore [<ROOT>] [--configfile] [--disable-parallel] [--ignore-failed-sources] [--no-cache] [--no-dependencies] [--packages] [-r|--runtime] [-s|--source] [-v|--verbosity]
dotnet restore [-h|--help]

更多帮助在这里获取更多帮助


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