Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用linq搜索json响应以查看值是否存在?_C#_Json_Linq - Fatal编程技术网

C# 如何使用linq搜索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

我有以下json响应

{
  "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在我看来,您应该创建新的类,以便能够反序列化并将其作为属性访问。