Фильтрация значений объектов в C # - PullRequest
0 голосов
/ 04 июня 2018

У меня есть C # web Api, получающий следующий объект:

     "cars": {
       "bmw": true,
       "benz": false,
       "kia": true,
       "hyundai": false,
       "madza": false,
       "ford": false
   }

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

 public CarsViewModel cars{ get; set; }

Как я могу получить все значения, которыеправда в вышеуказанном объекте?

Ответы [ 2 ]

0 голосов
/ 04 июня 2018

Вы попробуете этот код

 string jsonstring = "{\"cars\": {\"bmw\": \"true\", \"benz\": \"false\",  \"kia\": \"true\",  \"hyundai\": \"false\", \"madza\": \"false\",  \"ford\": \"false\"}}";
 dynamic data = JObject.Parse(jsonstring); 
 CarsViewModel obj = new CarsViewModel(); 
 var mydetails2 = JsonConvert.SerializeObject(data.cars);
 var mydetails3 = JsonConvert.DeserializeObject<Dictionary<string, bool>>(mydetails2);

  foreach (var pair in mydetails3)
    {
       // Console.WriteLine("{0}, {1}", pair.Key, pair.Value);
        if (pair.Value == true)
        {
            if (pair.Key == "bmw")
            {
                obj.bmw = pair.Value;
            }
            else if (pair.Key == "benz")
            {
                obj.benz = pair.Value;
            }
            else if (pair.Key == "kia")
            {
                obj.kia = pair.Value;
            }
            else if (pair.Key == "hyundai")
            {
                obj.hyundai = pair.Value;
            }
            else if (pair.Key == "madza")
            {
                obj.madza = pair.Value;
            }
            else if (pair.Key == "ford")
            {
                obj.ford = pair.Value;
            }

        }
    }

Я надеюсь, что это полезно для вас ..

0 голосов
/ 04 июня 2018

Вы можете проанализировать полученный объект в словаре и выбрать ключ, только если значение равно true.

string json = "{\"bmw\": true,\"benz\": false,\"kia\": true,\"hyundai\": false,\"madza\": false,\"ford\": false}";
var dict = JsonConvert.DeserializeObject<Dictionary<string,bool>>(json);

List<string> cars = dict.Where(x=>x.Value).Select(y=>y.Key).ToList();

Вы можете проверить результат с помощью:

cars.ForEach(y => Console.Write("{0}\n", y));

PS.Для сериализации вы должны использовать Newtonsoft.Json namespace.

...