在面向 .NET Core 的 Class 库包中使用 JsonConvert.DeserializeObject

Using JsonConvert.DeserializeObject in a Class Library Package targeting .NET Core

尝试在 Class 库包中使用 Json.NET 的 JsonConvert.DeserializeObject 方法时,我无法解决缺少的引用以 .NET Core 为目标。

要在 VS2015 中重现:

  1. 使用 RC1 创建一个新的 Class 库包。

  1. 安装 Newtonsoft.Json v8.0.2.
  2. 目标 .NET 核心。请参阅下面我正在使用的确切 project.json 文件。
  3. 在创建的默认 Class1 中,添加这个简单的方法:

    public void DoSomething()
    {
        var x = JsonConvert.DeserializeObject("");
    }
    
  4. 您将收到以下错误:

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 中工作正常,没有任何问题。