Matheus Arruda
Matheus Arruda

Reputation: 197

How to make for in Json Data

This is my json data:

{
   "code":1,
   "msg":"OK",
   "details":{
      "status":"Entregue",
      "status_list":{
         "Pendente":"Pendente",
         "Cancelado":"Cancelado",
         "Entregue":"Entregue",
         "Saiu para entrega":"Saiu para entrega",
         "Em preparo":"Em preparo",
         "Pronto para retirar":"Pronto para retirar",
         "decline":"decline",
         "accepted":"accepted"
      }
   },
   "request":"{\"token\":\"lg1c4shf81tj144ee0577f2f143053919d92ef8788b4109\",\"user_type\":\"admin\",\"mtid\":\"5\",\"order_id\":\"4683\",\"lang\":\"br\",\"api_key\":\"d6f5cc3b22423f2a15322013bb7caf2a\",\"app_version\":\"2.5\",\"merchant_device_id\":\"device_555\",\"device_platform\":\"Android\"}"
}

And I need to make a loop and get all itens in details.status_list and put data in checklistbox, my code is:

var ProdutoJsonString = await response.Content.ReadAsStringAsync();
                    ProdutoJsonString = ProdutoJsonString.Replace("(", "").Replace(")", "");
                    dynamic dados_msg = JObject.Parse(ProdutoJsonString);
                    //dados_msg = dados_msg.details.data;

                    try
                    {
                        //Verifico se o servidor irá retornar os dados
                        Console.WriteLine(dados_msg);

                        //Altero a mensagem recebido, filtrando os pedidos
                        dados_msg = dados_msg;


                        Console.Write(dados_msg);
                        int i = 0;
                        foreach (var status_list in dados_msg.details)
                        {
                            var itemName = status_list;

                            Console.WriteLine(itemName);

                            listaStatus.Items.Insert(i, itemName);
                            i++;
                        }

This code captures json, but I don't know how to get all status_list and add it to my checklistbox, example:

Text | Value

"Pendente":"Pendente"

"Cancelado":"Cancelado"

"Entregue":"Entregue"

"Saiu para entrega":"Saiu para entrega"

"Em preparo":"Em preparo"

"Pronto para retirar":"Pronto para retirar"

"decline":"decline"

"accepted":"accepted"

Upvotes: 0

Views: 55

Answers (1)

Anu Viswan
Anu Viswan

Reputation: 18153

You could deserialize to concrete classes than dynamic.This would help in creating collections easier for binding to CheckListBox.

For example,

public class DataClass
{
    public Details details { get; set; } // Since you are only interested in Status
}
public class Details
{
    public string status { get; set; }
    public Dictionary<string,string> status_list { get; set; } 
}

Now you can deserialize as

var statusCollection = JsonConvert.DeserializeObject<DataClass>(ProdutoJsonString).details.status_list;

Output

enter image description here

It becomes easier to bind to checklistbox now, than parsing values out of dynamic

Upvotes: 1

Related Questions