JSON DeserializeObject 无法从 System.String 强制转换或转换为模型

Dum*_*oks 5 c# asp.net-mvc

我正在尝试反序列化 JSON,剪切它不断向我显示此异常:

无法从 System.String 强制转换或转换为 SmartBookLibrary.ViewModel.BookJ1。

描述:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其在代码中的来源的更多信息。

异常详细信息:System.ArgumentException:无法从 System.String 强制转换或转换为 SmartBookLibrary.ViewModel.BookJ1。

这是我的 JSON 示例:

{
  "authorfamily1": "von Goethe",
  "authorname1": "Johann",
  "authorsurname1": "Wolfgang",
  "title": "Fausto I",
  "extension": "epub",
  "md5": "58cb1dd438bc6c6027fcda9e7729e5ee",
  "isbn": "",
  "descr": "",
  "cover": "1"
},
{
  "authorfamily1": "von Goethe 1",
  "authorname1": "Johann",
  "authorsurname1": "Wolfgang",
  "title": "Fausto I",
  "extension": "epub",
  "md5": "58cb1dd438bc6c6027fcda9e7729e5ee",
  "isbn": "",
  "descr": "",
  "cover": "1"
}
Run Code Online (Sandbox Code Playgroud)

这是代码:

var json = System.IO.File.ReadAllText("/data1.json");           
var courses = JsonConvert.DeserializeObject<Dictionary<string, BookJ1>>(json);
Run Code Online (Sandbox Code Playgroud)

这是我的模型或虚拟机:

public class BookJ1
{
    public string title { get; set; }
    public string isbn { get; set; }
    public string extension { get; set; }
    public string authorfamily1 { get; set; }
    public string authorname1 { get; set; }
    public string md5 { get; set; }
    public int cover { get; set; }
    [AllowHtml]
    [Column(TypeName = "text")]
    public string descr { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

Nko*_*osi 4

假设显示的示例是文件中的样子,

在尝试反序列化之前,您很可能需要将该 JSON 格式化为数组

var data = System.IO.File.ReadAllText("/data1.json");
var json = string.Format("[{0}]", data);
BookJ1[] courses = JsonConvert.DeserializeObject<BookJ1[]>(json);
Run Code Online (Sandbox Code Playgroud)

但是,如果显示的示例不完整并且文件中的数据实际上存储为数组

[{
  "authorfamily1": "von Goethe",
  "authorname1": "Johann",
  "authorsurname1": "Wolfgang",
  "title": "Fausto I",
  "extension": "epub",
  "md5": "58cb1dd438bc6c6027fcda9e7729e5ee",
  "isbn": "",
  "descr": "",
  "cover": "1"
},
{
  "authorfamily1": "von Goethe 1",
  "authorname1": "Johann",
  "authorsurname1": "Wolfgang",
  "title": "Fausto I",
  "extension": "epub",
  "md5": "58cb1dd438bc6c6027fcda9e7729e5ee",
  "isbn": "",
  "descr": "",
  "cover": "1"
}]
Run Code Online (Sandbox Code Playgroud)

那么你只需要反序列化为正确的类型

var json = System.IO.File.ReadAllText("/data1.json");           
BookJ1[] courses = JsonConvert.DeserializeObject<BookJ1[]>(json);
Run Code Online (Sandbox Code Playgroud)