#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);