Сериализовать объект для выпадающего списка страны

#c# #asp.net-core

#c# #asp.net-core

Вопрос:

У меня есть таблица флагов, которую я получаю просто так.

 public void GetFlags()
{
        var flags = _context.Flags.ToList();
        ViewBag.CountryFlags = flags;
}
  

Я хочу поместить его в пакет просмотра, но мне это нужно в этом формате

 var isoCountries = [
        { id: 1, flag: 'af', country  : 'Afghanistan' },
        { id: 2, flag: 'ax', country  : 'Aland Islands' },
        { id: 3, flag: 'al', country  : 'Albania' },
        { id: 4, flag: 'dz', country  : 'Algeria' },
        { id: 5, flag: 'as', country  : 'American Samoa' },
        { id: 6, flag: 'ad', country  : 'Andorra' },
        { id: 7, flag: 'ao', country  : 'Angola' },
        { id: 8, flag: 'ai', country  : 'Anguilla' }
]
  

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

Класс флагов

 public class Flags {
    public int id { get; set; }
    public string flag { get; set; }
    public string country  { get; set; }
}
  

Вот как я создаю флаг в выпадающем списке.

 <Script>

 $(function () {
    //Initialize Select2 Elements
    //$('.select2').select2()
    var isoCountries = @ViewBag.CountryFlags; 

    function formatCountry(country) {
        if (!country.id) { return country.text; }
        var $country = $(
            '<span class="flag-icon flag-icon-'   country.Flag   ' flag-icon-squared"></span>'  
            '<span class="flag-text">'   country.Country   "</span>"
        );
        return $country;
    };

    //Assuming you have a select element with name country
    // e.g. <select name="name"></select>
    $("[id='CountryOfBirth']").select2({
        placeholder: "Please Select a country",
        templateResult: formatCountry,
        data: isoCountries
    });

      $('#CountryOfBirth').trigger('change');

});
</script>
  

Что я пробовал

 public void GetFlags() {
   var flags = _context.Flags.ToList();
   var isoCountires = JsonConvert.SerializeObject(flags);
   ViewBag.CountryFlags = isoCountires;
 }
  

Я также пытался использовать это, поскольку, как я заметил, в json на нем была HTML-кодировка

  var isoCountries = { json : "@Html.Raw(JsonConvert.SerializeObject(@ViewBag.CountryFlags))" };
  

Но он все еще не в том формате, который необходим для получения результатов, описанных выше.

Комментарии:

1. Нам нужно знать тип флагов внутри _context. Пожалуйста, включите это объявление в свой вопрос. Вероятно, это начинается с class Flag . Вероятно, вы сможете решить свою проблему довольно просто, используя метод Linq Select .

2. Это требует более подробной информации. Помогите мне воспроизвести ваши результаты.

3. @Wyck пожалуйста, смотрите выше

4. @JoelFan добавил больше деталей, извините за это

5. Я думаю, вы имеете в виду сериализацию , а не стерилизацию , но я не уверен.

Ответ №1:

Просто измените его следующим образом:

 var isoCountries = JSON.parse('@Html.Raw(ViewBag.CountryFlags)');
  

С помощью метода GetFlags:

 public void GetFlags() {
    var flags = _context.Flags.ToList();
    var isoCountires = JsonConvert.SerializeObject(flags);
    ViewBag.CountryFlags = isoCountires;
}