Xamarin Refit - Newtonsoft.Json.JsonSerializationException
У меня есть некоторые проблемы с сериализацией JSON. Когда я пытаюсь десериализовать мой объект JSON, он возвращает мне эту ошибку:
Newtonsoft.Json.JsonSerializationException: Невозможно десериализовать текущий массив JSON (например, [1,2,3]) в тип 'Project.Models.BookModel', поскольку для типа требуется объект JSON (например, {"name":"value"}) правильно десериализовать.
Моя проблема здесь в том, что мне нужно десериализовать мой объект двумя различными способами: в массиве JSON (например, [1,2,3]), чтобы извлечь "_id", "user" и "name", а затем в массив JSON. (например, ["name":"value"]) для извлечения "книг". И я не знаю, как это сделать. Или, точнее, я не знаю, возможно ли это с Refit.
Вот мой JSON:
[
{
"_id": "5c014a1e43b6804ed7b642b2",
"__v": 0,
"user": "5c014a1d43b6804ed7b642b1",
"name": "Favoris",
"books": [
{
"_id": "5a8f12e16a16fa06d1f5b0cb",
"title": "Harry Potter et la Chambre des Secrets",
"author": {
"_id": "5a8f12e16a16fa06d1f5b0bd",
"name": "J K Rowling",
"__v": 0
},
"literaryGenre": "Juvenile Fiction",
"isbn": 9781781101049,
"externalImage": "...",
"__v": 0,
"content": {
"brief": "test1"
}
},
{
"_id": "5a8f12e16a16fa06d1f5b0d0",
"title": "Harry Potter et la Coupe de Feu",
"author": {
"_id": "5a8f12e16a16fa06d1f5b0bd",
"name": "J K Rowling",
"__v": 0
},
"literaryGenre": "Juvenile Fiction",
"isbn": 9781781101063,
"externalImage": "...",
"__v": 0,
"content": {
"brief": "test2"
}
}
]
}
]
Вот мой код:
public async void ViewLibrary()
{
IProjectApi response = ProjectRepository.Instance.ProjectApi;
List<LibraryModel> library = await response.GetLibrary("5c014a1d43b6804ed7b642b1");
this.LibraryItems = library;
}
И мой объект LibraryModel:
public class LibraryModel
{
public string _id { get; set; }
public string user { get; set; }
public string name { get; set; }
public BookModel books { get; set; }
}
И мой метод GetLibrary:
[Get("/api/library/user/{UserId}")]
Task<List<LibraryModel>> GetLibrary(string UserId);
2 ответа
Невозможно десериализовать текущий массив JSON (например, [1,2,3]) в тип 'Project.Models.BookModel', поскольку для типа требуется объект JSON (например, {"name":"value"})
В json
приведи свой BookModel
возвращая несколько записей, поэтому он должен быть определен как List<BookModel>
,
В LibraryModel
попробуйте использовать публичный List<BookModel> books { get; set; }
,
Реализуйте эти классы в любом месте вашего кода и попытайтесь десериализовать ваш json с помощью этих классов.
public class Author
{
public string _id { get; set; }
public string name { get; set; }
public int __v { get; set; }
}
public class Content
{
public string brief { get; set; }
}
public class Book
{
public string _id { get; set; }
public string title { get; set; }
public Author author { get; set; }
public string literaryGenre { get; set; }
public object isbn { get; set; }
public string externalImage { get; set; }
public int __v { get; set; }
public Content content { get; set; }
}
public class RootObject
{
public string _id { get; set; }
public int __v { get; set; }
public string user { get; set; }
public string name { get; set; }
public List<Book> books { get; set; }
}