JSON LInq查询

JSON LInq查询,json,linq,json.net,Json,Linq,Json.net,我正在尝试使用Linq查询来确定以下JSON是否为真,如果它包含SKU为12345或类型代码为“C”的产品 我一直在使用Json.net(http://james.newtonking.com/projects/json-net.aspx)首先,您必须将JSON反序列化为C#对象,比如Product class Product { public int SKU { get; set; } public string Desc { get; set; } public st

我正在尝试使用Linq查询来确定以下JSON是否为真,如果它包含SKU为12345或类型代码为“C”的产品


我一直在使用Json.net(http://james.newtonking.com/projects/json-net.aspx)

首先,您必须将JSON反序列化为C#对象,比如Product

class Product
{
    public int SKU { get; set; }
    public string Desc { get; set; }
    public string TypeCode { get; set; }
    public decimal Cost { get; set; }
}
然后,使用.NET的JavaScriptSerializer(System.Web.Script.Serialization),将json字符串转换为自定义对象的列表

string json = "[{\"SKU\":\"12345\",\"Description\":\"Test Part 12345\",\"TypeCode\":\"A\",\"Cost\":24.99},{\"SKU\":\"54567\",\"Description\":\"Test Part 54567\",\"TypeCode\":\"B\",\"Cost\":9.99},{\"SKU\":\"QWZ2342\",\"Description\":\"Test Part QWZ2342\",\"TypeCode\":\"C\",\"Cost\":19.99}]"

JavaScriptSerializer jsonSerializer = new JavaScriptSerializer();
List<Product> productList = new List<Product>();
productList = jsonSerializer.Deserialize<List<Product>>(json);

当我运行linq查询时,我将返回所有结果,而不是where语句过滤的结果。我的清单上有80项。当我添加where子句并指定一个不存在的值(例如o.SKU==“ZZZZZ”)时,我仍然得到一个不为null的var,计数为80项。我注意到Sourc count=80,但如果查询where条件不为true,则结果视图为空。但是,检查是否找到!=null返回true,即使结果视图为空。确定查询是否返回任何结果的最佳方法是什么?好的,我想我已经找到了。我正在使用Count()方法,例如int Count=Found.Count();
string json = "[{\"SKU\":\"12345\",\"Description\":\"Test Part 12345\",\"TypeCode\":\"A\",\"Cost\":24.99},{\"SKU\":\"54567\",\"Description\":\"Test Part 54567\",\"TypeCode\":\"B\",\"Cost\":9.99},{\"SKU\":\"QWZ2342\",\"Description\":\"Test Part QWZ2342\",\"TypeCode\":\"C\",\"Cost\":19.99}]"

JavaScriptSerializer jsonSerializer = new JavaScriptSerializer();
List<Product> productList = new List<Product>();
productList = jsonSerializer.Deserialize<List<Product>>(json);
var Found = from o in productList
                    where o.SKU == 12345
                    select o.SKU;
if (Found.Count() > 0)
    return true;
else
    return false;