JSON DeserializeObject не удалось привести или преобразовать из System.Строка в модель

#c# #asp.net-mvc

#c# #asp.net-mvc

Вопрос:

Я пытаюсь десериализовать JSON, вырезать его, продолжая показывать мне это исключение:

Не удалось привести или преобразовать из System.Строка в SmartBookLibrary.ViewModel.BookJ1.

Описание: Необработанное исключение возникло во время выполнения текущего веб-запроса. Пожалуйста, просмотрите трассировку стека для получения дополнительной информации об ошибке и о том, где она возникла в коде.

Сведения об исключении: System.Исключение ArgumentException: не удалось выполнить приведение или преобразование из System.Строка в 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"
}
  

Вот код:

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

Вот моя модель или виртуальная машина:

 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; }
}
  

Комментарии:

1. Общий тип аргумента не соответствует показанному JSON. Этот JSON завершен? Скорее всего, вам нужно преобразовать этот JSON в массив, прежде чем пытаться его десериализовать

Ответ №1:

Предполагая, что показанный пример соответствует тому, как он есть в файле,

скорее всего, вам нужно отформатировать этот JSON в виде массива, прежде чем пытаться его десериализовать

 var data = System.IO.File.ReadAllText("/data1.json");
var json = string.Format("[{0}]", data);
BookJ1[] courses = JsonConvert.DeserializeObject<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"
}]
  

тогда вам просто нужно десериализовать до правильного типа

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