Создание пользовательского класса с помощью QuickType:
public class CustomSelectList
{
[JsonProperty("MyMultiSelectList")]
public MyMultiSelectList MyMultiSelectList { get; set; }
}
public class MyMultiSelectList
{
[JsonProperty("$type")]
public string Type { get; set; }
[JsonProperty("$values")]
public Value[] Values { get; set; }
}
public class Value
{
[JsonProperty("Disabled")]
public bool Disabled { get; set; }
[JsonProperty("Selected")]
public bool Selected { get; set; }
[JsonProperty("Text")]
public string Text { get; set; }
[JsonProperty("Value")]
public string ValueValue { get; set; }
}
десериализовать его
var customList = JsonConvert.DeserializeObject<CustomSelectList>(json);
и затем загрузить его в список
foreach (var item in customList.MyMultiSelectList.Values)
multiSelectList.Add(new SelectListItem{ Value= item.ValueValue, Text=item.Text });
и заполнить MultiSelectList (еще не проверено)
var multiList = new MultiSelectList(list);
Другой подход заключается в том, чтобы загрузить его в структуру данных, которая сначала поддерживает сериализацию (например, List<KeyValuePair<string,string>>
:
var serializableList = new List<KeyValuePair<string, string>>();
foreach(var item in selectList)
serializableList.Add(new KeyValuePair<string, string>(item.Text, item.Value));
А затем сериализовать serializableList
, вы получите
[{"Key":"select item value","Value":"select item text"}]
Если вы хотите сохранить больше информации, например, выбран ли элемент, вы можете сделать List<Tuple<string,string,bool>>
когда вам нужно перестроить MultiSelectList
, просто десериализовать его, добавить в List<SelectListItem>
и затем передать список для создания MultiSelectList (new MultiSelectLust(list)
)