Десериализация JSON - неправильный тип

1

Здесь, как я пытаюсь десериализовать мой json:

new JavaScriptSerializer().Deserialize<Dictionary<int, MyModel>>(myData);

Здесь класс:

public class MyModel
{
    public Dictionary<int, ItemModel> Translation { get; set; }

    public int Id { get; set; }
}

public class ItemModel
{
    public string Name { get; set; }

    public string ShortDescription { get; set; }

    public string LongDescription { get; set; }
}

И вот json:

"[[],[],{"Translation":{"1":{"Name":"Bla1","ShortDescription":"bla1","LongDescription":"bla1"},"2":{"Name":"BlaUS1","ShortDescription":"BlaUS1","LongDescription":"BlaUS1"}},"Id":"12"},{"Translation":{"1":{"Name":"Bla22","ShortDescription":"bla22","LongDescription":"bla22"},"2":{"Name":"Bla2US2","ShortDescription":"Bla2US2","LongDescription":"Bla2US2"}},"Id":"13"}]"

и я получаю ошибку, что тип не поддерживается для десериализации массива.

Где моя ошибка?

  • 0
    Похоже, у вас есть массив, в котором первые два элемента являются массивами нулевой длины, а 3-й и 4-й элементы принадлежат MyModel - его, вероятно, нельзя десериализовать, поскольку он не может превратить пустой массив в MyModel, установите первые два элемента на скорее null , чем []
Теги:
deserialization

2 ответа

1
Лучший ответ

Прежде всего, ваш JSON выглядит немного неправильно для меня. Это и массив из 4 элементов и 1-й два элемента - это пустые массивы, но два других объекта? Я подозреваю, что ваш JSON должен быть примерно таким:

"[{" Перевод ": {" 1 ": {" Имя ":" Bla1", "SHORTDESCRIPTION": "bla1", "LongDescription": "bla1"}, "2": { "Имя": "BlaUS1", "SHORTDESCRIPTION": "BlaUS1", "LongDescription": "BlaUS1"}}, "Идентификатор": "12"}, { "Перевод": { "1": { "Имя": "Bla22", "SHORTDESCRIPTION": "bla22", "LongDescription": "bla22"}, "2": { "Имя": "Bla2US2", "SHORTDESCRIPTION": "Bla2US2", "LongDescription": "Bla2US2"}}, "Идентификатор":" 13 "}]"

Другая проблема заключается в том, что у вас есть Dictionary<int, ItemModel> но для сериализации/десериализации вы должны иметь ключ типа String или Object.

Рабочий пример (при условии, что вы перешли из Dictionary<int, ItemModel> в Dictionary<object, ItemModel>):

string input = "[{\"Translation\":{\"1\":{\"Name\":\"Bla1\",\"ShortDescription\":\"bla1\",\"LongDescription\":\"bla1\"},\"2\":{\"Name\":\"BlaUS1\",\"ShortDescription\":\"BlaUS1\",\"LongDescription\":\"BlaUS1\"}},\"Id\":\"12\"},{\"Translation\":{\"1\":{\"Name\":\"Bla22\",\"ShortDescription\":\"bla22\",\"LongDescription\":\"bla22\"},\"2\":{\"Name\":\"Bla2US2\",\"ShortDescription\":\"Bla2US2\",\"LongDescription\":\"Bla2US2\"}},\"Id\":\"13\"}]";

List<MyModel> myModels = new JavaScriptSerializer().Deserialize<List<MyModel>>(input);
0

Ваша строка предполагает, что у вас есть массив JSON, например: - [1,2,3]

но вы пытаетесь десериализовать его в словарь, для которого json-представление сродни

{"1":"Hai","2":"Hello"}

очевидно, что библиотека выдает ошибку. Может быть, вы не используете следующее для десериализации строки.

new JavaScriptSerializer().Deserialize<List<MyModel>[]>(myData)

Однако, чтобы использовать его, вы не можете иметь пустые массивы в json, вы должны заполнить их значениями по умолчанию для свойств.

Чтобы доказать, что вышеприведенные работы, попробуйте

"[{"Translation":{"1":{"Name":"Bla1","ShortDescription":"bla1","LongDescription":"bla1"},"2":  {"Name":"BlaUS1","ShortDescription":"BlaUS1","LongDescription":"BlaUS1"}},"Id":"12"},{"Translation":{"1":{"Name":"Bla22","ShortDescription":"bla22","LongDescription":"bla22"},"2":{"Name":"Bla2US2","ShortDescription":"Bla2US2","LongDescription":"Bla2US2"}},"Id":"13"}]"

с

new JavaScriptSerializer().Deserialize<List<MyModel>>(myData)
  • 0
    Здесь не работает
  • 0
    @csprabala Я попытался с List <MyModel> [], и он дает мне список размером 2, но с пустыми объектами. Список <MyModel> не работает, он выдает исключение.
Показать ещё 2 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню