Здесь, как я пытаюсь десериализовать мой 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"}]"
и я получаю ошибку, что тип не поддерживается для десериализации массива.
Где моя ошибка?
Прежде всего, ваш 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);
Ваша строка предполагает, что у вас есть массив 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)
null
, чем[]