在C#中过滤对象值

时间:2018-06-04 06:26:15

标签: c# api linq-to-objects

我有一个C#web Api收到以下对象:

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

class属性如下:

 public CarsViewModel cars{ get; set; }

如何获得上述对象中的所有值?

2 个答案:

答案 0 :(得分:2)

您可以将收到的对象解析为字典,并仅在值为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命名空间。

答案 1 :(得分:0)

你试试这段代码

 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;
            }

        }
    }

我希望它对你有所帮助..