如何在C#中的嵌套JSON解析对象中检查键是否存在

时间:2018-09-24 16:26:17

标签: c# json

我有与以下格式相似的JSON:

{
    "id": "S01",
    "submittedBy": "A12345",
    "orderData": {
        "items": [
            {
                "key": "Item1",
                "value": "10"
            },
            {
                "key": "Item2",
                "value": "20"
            }
        ]
    }
}

通过某种方式,我将这个JSON字符串放入应用程序的jsonString变量中。

现在我有几个类似于以下的课程:

[DataContract]
public class Order
{
    [DataMember(Name = "id")]
        public string Id { get; set; }

    [DataMember(Name = "submittedBy")]
        public string SubmittedBy { get; set; }

    [DataMember(Name = "orderData")]
        public OrderData OrderData { get; set; }    

}

[DataContract]
public class OrderData
{
    [DataMember(Name = "items")]
        public List<Items> Items { get; set; }
}

[DataContract]
public class Items 
{
    [DataMember(Name="key")]
        public string Key { get; set; }

    [DataMember(Name="value")]
        public string Value { get; set; }
}

获取JSON字符串后,我正在执行此操作。

Order order = new Order();
order = JObject.Parse(jsonString).ToObject<Order>();

现在在order对象中,如果我必须检查是否存在任何键:“ Item3”而不通过它进行循环,如何检查它?

非常感谢您的帮助。

PS:道歉题。欢迎提出任何建议/进行更合适的编辑。

2 个答案:

答案 0 :(得分:1)

使用LINQ .Any()

order.OrderData.Items.Any(q => q.Key == "item3")

您可能还想添加一些空引用检查:

order.OrderData?.Items?.Any(q => q.Key == "item3") ?? false;

答案 1 :(得分:0)

像这样使用LINQ的Any() method

bool exists = order.OrderData != null && 
    order.OrderData.Items != null &&
    order.OrderData.Items.Any(x => x.Key == "Item3")

另请参阅此article

侧面说明:代码中的new Order()是多余的。您可以简化为:

Order order = JObject.Parse(jsonString).ToObject<Order>();