C # десериализовать список JSON WinForm Combobox - PullRequest
0 голосов
/ 24 сентября 2018

Я пытаюсь создать приложение, которое читает файл json, преобразует его в объекты c # и печатает выходные данные на основе выбранного элемента из комбинированного списка.

Файл JSON выглядит следующим образом

[
{
    "Description": "Some text here.",
    "Id": 1,
    "Name": "Option 1",
},
{
    "Description": "Another different text here",
    "Id": 2,
    "Name": "Option 2",

}

]

Класс определяется следующим образом:

    public class Incident
{

    public Incident()
    {
    }
    public Incident(int id, string name, string description)
    {
        Id = id;
        Name = name;
        Description = description;
    }

    public int Id { get; set; }
    public string Name { get; set; }
    public string Description { get; set; }
}

Я заполняю поле со значениями из поля имени следующим образом:

            var jsonPath = Path.Combine(Environment.CurrentDirectory, "Data", "configuration.json");
            // Read values from file
            var strReadJson = File.ReadAllText(jsonPath);
            // Convert to Json Object
            var x = JsonConvert.DeserializeObject<List<Incident>>(strReadJson);

            foreach (var option in x.Select(p => p.Name))
            {
                boxOptions.Items.Add(option);
                boxOptions.Sorted = true;
            }

Теперь я хотел бы заполнить текстовое поле полем описания инцидента, основанным на выбранном имени из выпадающего списка, это та часть, где я застрял.

Итак, если пользователь выбирает из выпадающего списка имя«Вариант 1», текстовое поле должно отображать «Некоторый текст здесь», если выбран «Вариант 2», то должен отображаться «Другой другой текст».

Я не знаю, если Здесь следует применять цикл foreach , поскольку он будет отображать все поля описания из списка.

Я ценю любую предоставленную помощь.Заранее спасибо.

Ответы [ 3 ]

0 голосов
/ 24 сентября 2018

Сначала вам нужно преобразовать объект json в список C #.

Затем просто поместите условие where в соответствие с вашим условием и верните этот объект в UI.

    public class YourModel
      {

        public int Id { get; set; }
        public string Name { get; set; }
        public string Description { get; set; }
      }

    class YourClass
      {
        public IEnumerable<YourModel> YourModels{ get; set; }
      }

 string jsonString = //your json will go here

                JavaScriptSerializer serializer = new JavaScriptSerializer();
                YourClass data= serializer.Deserialize<YourClass >(jsonString);
        }
0 голосов
/ 24 сентября 2018

Пожалуйста, отметьте

Частная переменная List<Incident> x = new List<Incident>();

Считать файл (использовал ваш код)

    private void frmSampleJson_Load(object sender, EventArgs e)
    {
        string Json = File.ReadAllText(@"d://read.txt").ToString();
        //Read the Array
        JArray array = JArray.Parse(Json);
        //Sort the Array
        JArray sorted = new JArray(array.OrderBy(obj => (string)obj["Name"]));
        //Added sorted JArray to List<Incident>
        x = sorted.ToObject<List<Incident>>();

        foreach (var option in x.Select(p => p.Name))
        {
            comboBox1.Items.Add(option);                
        }
    }

Теперь в свойствах Combox Использовано SelectedIndexChange Событие

    private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
    {
        int nIndex = comboBox1.SelectedIndex;
        string strDesc = x[nIndex].Description;
        textBox1.Text = strDesc;
    }

On Selecting Combo Box Item 1

On Selecting Combo Box Item 2

0 голосов
/ 24 сентября 2018

Использование события ComboBox SelectedIndexChanged.В этом случае заполните текстовое поле значением из Combobox.См. Код ниже:

// Add this in the Form Initialization or Form_Load()
boxOptions.SelectedIndexChanged += new 
 system.EventHandler(boxOptions_SelectedIndexChanged);

// Event Handler
private void boxOptions_SelectedIndexChanged(object sender, System.EventArgs e)
{
    txtBox1.Text = comboBox_Code1.Text;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...