Я сериализовал MultiSelectList с Json.NET в ASP.NET (с включенной обработкой TypeNameHandling), что дало следующий результат:
"MyMultiSelectList": {
"$type": "System.Web.Mvc.MultiSelectList, System.Web.Mvc",
"$values": [
{
"Disabled": false,
"Selected": true,
"Text": "Text1",
"Value": "Value1"
},
{
"Disabled": false,
"Selected": false,
"Text": "Text2",
"Value": "Value2"
},
{
"Disabled": false,
"Selected": false,
"Text": "Text3",
"Value": "Value3"
}
]
}
При десериализации этого Json обратно в MultiSelectList без каких-либо пользовательских преобразователей с использованием этого метода, я получаю MultiSelectList с 3 SelectListItems, где для их свойства Text установлено значение «System.Web.Mvc.SelectListItem», а их свойство Value пусто.
Во-первых, я предположил, что Json.NET не может правильно десериализовать SelectListItems, поэтому я сделал Пользовательский JsonConverter для типа SelectListItem. Мой преобразователь правильно создал SelectListItems, но результат остался прежним.
Затем я попытался создать собственный преобразователь для типа MultiSelectList, но этот код никогда не вызывается Json.NET.
Возможно, эта проблема как-то связана с тем фактом, что MultiSelectList не имеет пустого конструктора по умолчанию, но у меня нет возможности попробовать.