在面向 .NET Core 的 Class 库包中使用 JsonConvert.DeserializeObject
Using JsonConvert.DeserializeObject in a Class Library Package targeting .NET Core
尝试在 Class 库包中使用 Json.NET 的 JsonConvert.DeserializeObject 方法时,我无法解决缺少的引用以 .NET Core 为目标。
要在 VS2015 中重现:
- 使用 RC1 创建一个新的 Class 库包。
- 安装 Newtonsoft.Json v8.0.2.
- 目标 .NET 核心。请参阅下面我正在使用的确切 project.json 文件。
在创建的默认 Class1 中,添加这个简单的方法:
public void DoSomething()
{
var x = JsonConvert.DeserializeObject("");
}
您将收到以下错误:
The type 'Object' is defined in an assembly that is not referenced. You must add a reference to assembly 'mscorlib, Version=2.0.5.0'
知道我缺少什么参考资料吗?我认为它是某种 System.Serialization 或 System.IO 包,但我不知道是哪一个。
project.json:
{
"version": "1.0.0-*",
"description": "ClassLibrary1 Class Library",
"authors": [ "DD" ],
"tags": [ "" ],
"projectUrl": "",
"licenseUrl": "",
"frameworks": {
"net451": { },
"netcore50": {
"dependencies": {
"Microsoft.CSharp": "4.0.0",
"System.Collections": "4.0.0",
"System.Linq": "4.0.0",
"System.Runtime": "4.0.0",
"System.Threading": "4.0.0"
}
}
},
"dependencies": {
"Newtonsoft.Json": "8.0.2"
}
}
您可以通过添加 Microsoft.NETCore.Portable.Compatibility
的依赖项来解决此问题。 [NuGet page]
{
"version": "1.0.0-*",
"description": "ClassLibrary1 Class Library",
"authors": [ "DD" ],
"tags": [ "" ],
"projectUrl": "",
"licenseUrl": "",
"frameworks": {
"net451": { },
"netcore50": {
"dependencies": {
"Microsoft.CSharp": "4.0.0",
"System.Collections": "4.0.0",
"System.Linq": "4.0.0",
"System.Runtime": "4.0.0",
"System.Threading": "4.0.0"
}
}
},
"dependencies": {
"Newtonsoft.Json": "8.0.2",
"Microsoft.NETCore.Portable.Compatibility": "1.0.1-beta-23516"
}
}
您可以使用最新的 Newtonsoft.Json nuget 包(目前是 11.0.2),在 .NET Core 2.1 中工作正常,没有任何问题。
尝试在 Class 库包中使用 Json.NET 的 JsonConvert.DeserializeObject 方法时,我无法解决缺少的引用以 .NET Core 为目标。
要在 VS2015 中重现:
- 使用 RC1 创建一个新的 Class 库包。
- 安装 Newtonsoft.Json v8.0.2.
- 目标 .NET 核心。请参阅下面我正在使用的确切 project.json 文件。
在创建的默认 Class1 中,添加这个简单的方法:
public void DoSomething() { var x = JsonConvert.DeserializeObject(""); }
您将收到以下错误:
The type 'Object' is defined in an assembly that is not referenced. You must add a reference to assembly 'mscorlib, Version=2.0.5.0'
知道我缺少什么参考资料吗?我认为它是某种 System.Serialization 或 System.IO 包,但我不知道是哪一个。
project.json:
{
"version": "1.0.0-*",
"description": "ClassLibrary1 Class Library",
"authors": [ "DD" ],
"tags": [ "" ],
"projectUrl": "",
"licenseUrl": "",
"frameworks": {
"net451": { },
"netcore50": {
"dependencies": {
"Microsoft.CSharp": "4.0.0",
"System.Collections": "4.0.0",
"System.Linq": "4.0.0",
"System.Runtime": "4.0.0",
"System.Threading": "4.0.0"
}
}
},
"dependencies": {
"Newtonsoft.Json": "8.0.2"
}
}
您可以通过添加 Microsoft.NETCore.Portable.Compatibility
的依赖项来解决此问题。 [NuGet page]
{
"version": "1.0.0-*",
"description": "ClassLibrary1 Class Library",
"authors": [ "DD" ],
"tags": [ "" ],
"projectUrl": "",
"licenseUrl": "",
"frameworks": {
"net451": { },
"netcore50": {
"dependencies": {
"Microsoft.CSharp": "4.0.0",
"System.Collections": "4.0.0",
"System.Linq": "4.0.0",
"System.Runtime": "4.0.0",
"System.Threading": "4.0.0"
}
}
},
"dependencies": {
"Newtonsoft.Json": "8.0.2",
"Microsoft.NETCore.Portable.Compatibility": "1.0.1-beta-23516"
}
}
您可以使用最新的 Newtonsoft.Json nuget 包(目前是 11.0.2),在 .NET Core 2.1 中工作正常,没有任何问题。