C# 如何使用linq搜索json响应以查看值是否存在?
我有以下json响应C# 如何使用linq搜索json响应以查看值是否存在?,c#,json,linq,C#,Json,Linq,我有以下json响应 { "Id": "1234", "Name": "Test", "Orders": [ { "OrderId": "87654", "OrderDetails": { "OrdId": "1234", "Name": "Desk" } }, { "OrderId": "54213", "OrderDetails": { "OrdId
{
"Id": "1234",
"Name": "Test",
"Orders": [
{
"OrderId": "87654",
"OrderDetails": {
"OrdId": "1234",
"Name": "Desk"
}
},
{
"OrderId": "54213",
"OrderDetails": {
"OrdId": "4321",
"Name": "Table"
}
}
]
}
我想搜索订单列表,看看是否有订单ID为87654。
我可以使用数组,但如何使用Linq呢?您可以使用Newtonsoft.json将json字符串反序列化到JObject,然后循环遍历订单以获取OrderID
var obj = JObject.Parse(json);
foreach(var order in obj["Orders"])
{
Console.WriteLine(order["OrderId"]);
}
或者可以使用Where子句
var myOrder = obj["Orders"].Where(x => x["OrderId"].ToString().Equals("87654")).FirstOrDefault();
然后可以打印该顺序的任何属性
Console.WriteLine(myOrder["OrderDetails"]["Name"].ToString());
// Prints: Desk
或者,您可以:还可以使用类来反序列化您拥有的json并查询订单
public class OrderDetails
{
public string OrdId { get; set; }
public string Name { get; set; }
}
public class Order
{
public string OrderId { get; set; }
public OrderDetails OrderDetails { get; set; }
}
public class RootObject
{
public string Id { get; set; }
public string Name { get; set; }
public List<Order> Orders { get; set; }
}
public static void Main(string[] args)
{
string json = File.ReadAllText(@"C:\temp\json.txt");
var obj = JsonConvert.DeserializeObject<RootObject>(json);
var myOrder = obj.Orders.FirstOrDefault(x => x.OrderId.Equals("87654"));
if (myOrder != null)
{
Console.WriteLine(myOrder.OrderDetails.Name);
}
}
公共类OrderDetails
{
公共字符串OrdId{get;set;}
公共字符串名称{get;set;}
}
公共阶级秩序
{
公共字符串OrderId{get;set;}
public OrderDetails OrderDetails{get;set;}
}
公共类根对象
{
公共字符串Id{get;set;}
公共字符串名称{get;set;}
公共列表顺序{get;set;}
}
公共静态void Main(字符串[]args)
{
字符串json=File.ReadAllText(@“C:\temp\json.txt”);
var obj=JsonConvert.DeserializeObject(json);
var myOrder=obj.Orders.FirstOrDefault(x=>x.OrderId.Equals(“87654”);
if(myOrder!=null)
{
WriteLine(myOrder.OrderDetails.Name);
}
}
您可以使用Newtonsoft.json将json字符串反序列化到JObject,然后循环遍历订单以获取OrderID
var obj = JObject.Parse(json);
foreach(var order in obj["Orders"])
{
Console.WriteLine(order["OrderId"]);
}
或者可以使用Where子句
var myOrder = obj["Orders"].Where(x => x["OrderId"].ToString().Equals("87654")).FirstOrDefault();
然后可以打印该顺序的任何属性
Console.WriteLine(myOrder["OrderDetails"]["Name"].ToString());
// Prints: Desk
或者,您可以:还可以使用类来反序列化您拥有的json并查询订单
public class OrderDetails
{
public string OrdId { get; set; }
public string Name { get; set; }
}
public class Order
{
public string OrderId { get; set; }
public OrderDetails OrderDetails { get; set; }
}
public class RootObject
{
public string Id { get; set; }
public string Name { get; set; }
public List<Order> Orders { get; set; }
}
public static void Main(string[] args)
{
string json = File.ReadAllText(@"C:\temp\json.txt");
var obj = JsonConvert.DeserializeObject<RootObject>(json);
var myOrder = obj.Orders.FirstOrDefault(x => x.OrderId.Equals("87654"));
if (myOrder != null)
{
Console.WriteLine(myOrder.OrderDetails.Name);
}
}
公共类OrderDetails
{
公共字符串OrdId{get;set;}
公共字符串名称{get;set;}
}
公共阶级秩序
{
公共字符串OrderId{get;set;}
public OrderDetails OrderDetails{get;set;}
}
公共类根对象
{
公共字符串Id{get;set;}
公共字符串名称{get;set;}
公共列表顺序{get;set;}
}
公共静态void Main(字符串[]args)
{
字符串json=File.ReadAllText(@“C:\temp\json.txt”);
var obj=JsonConvert.DeserializeObject(json);
var myOrder=obj.Orders.FirstOrDefault(x=>x.OrderId.Equals(“87654”);
if(myOrder!=null)
{
WriteLine(myOrder.OrderDetails.Name);
}
}
你可以用它来实现它
var jsonData = "{ 'Id': '1234', 'Name': 'Test', 'Orders': [ {'OrderId': '87654', 'OrderDetails': { 'OrdId': '1234', 'Name': 'Desk' } }, { 'OrderId': '54213', 'OrderDetails': { 'OrdId': '4321','Name': 'Table' }}]}";
var desirializedData = JsonConvert.DeserializeObject<MyObject>(jsonData);
var result = desirializedData.Orders.Where(p => p.OrderId == 87654);
foreach(var master in result)
{
Console.WriteLine(master.OrderId + " " + master.OrderDetails.Name);
}
var jsonData=“{'Id':'1234','Name':'Test','Orders':[{'OrderId':'87654','OrderDetails':{'OrderId':'1234','Name':'Desk'},{'OrderId':'54213','OrderDetails':{'OrderId':'4321','Name':'Table'}];
var desireializeddata=JsonConvert.DeserializeObject(jsonData);
var result=desireializeddata.Orders.Where(p=>p.OrderId==87654);
foreach(结果中的var主数据)
{
Console.WriteLine(master.OrderId+“”+master.OrderDetails.Name);
}
你可以用它来实现它
var jsonData = "{ 'Id': '1234', 'Name': 'Test', 'Orders': [ {'OrderId': '87654', 'OrderDetails': { 'OrdId': '1234', 'Name': 'Desk' } }, { 'OrderId': '54213', 'OrderDetails': { 'OrdId': '4321','Name': 'Table' }}]}";
var desirializedData = JsonConvert.DeserializeObject<MyObject>(jsonData);
var result = desirializedData.Orders.Where(p => p.OrderId == 87654);
foreach(var master in result)
{
Console.WriteLine(master.OrderId + " " + master.OrderDetails.Name);
}
var jsonData=“{'Id':'1234','Name':'Test','Orders':[{'OrderId':'87654','OrderDetails':{'OrderId':'1234','Name':'Desk'},{'OrderId':'54213','OrderDetails':{'OrderId':'4321','Name':'Table'}];
var desireializeddata=JsonConvert.DeserializeObject(jsonData);
var result=desireializeddata.Orders.Where(p=>p.OrderId==87654);
foreach(结果中的var主数据)
{
Console.WriteLine(master.OrderId+“”+master.OrderDetails.Name);
}
您可以发布您的帖子并添加您现在正在使用的代码以进行反序列化(我希望您正在这样做),然后搜索它吗?我使用以下公共类OrderDetails{public string OrdId{get;set;}public string Name{get;set;}进行反序列化公共类顺序{public string OrderId{get;set;}public OrderDetails OrderDetails{get;set;}}公共类根对象{public string Id{get;set;}公共字符串名称{get;set;}公共列表顺序{get;set;}}反序列化JsonConvert.DeserializeObject(json):使用动态对象执行任务。您应该将代码编辑到问题中。您是否可以在帖子中添加您当前使用的代码以进行反序列化(我希望您正在这样做),然后进行搜索?我使用以下公共类OrderDetails进行反序列化{public string OrdId{get;set;}public string Name{get;set;}}public class Order{public string OrderId{get;set;}public OrderDetails OrderDetails{get;set;}public class RootObject{public string Id{get;set;}public string Name{get;set;}public List Orders{get;set;}反序列化JsonConvert.DeserializeObject(json):将动态对象用于任务。您应该在问题中编辑代码。desrializedData声明为动态,因此我有以下动态DeserializedData=JsonConvert.DeserializeObject(jsonData);那么我将如何将其用于结果?动态Desiralizeddata在我看来,您应该创建新类,以便能够将其作为属性进行反序列化和访问。Desiralizeddata声明为动态的,因此我有以下动态Desiralizeddata=JsonConvert.DeserializeObject(jsonData);那么我将如何将其用于结果?动态Desiralizeddata在我看来,您应该创建新的类,以便能够反序列化并将其作为属性访问。