C# 如何从json数组中寻址对象

C# 如何从json数组中寻址对象,c#,json.net,C#,Json.net,使用JSON库,我导入了一个对象数组: dynamic serviceList = JsonConvert.DeserializeObject(listString) 我有一个json对象数组,每个对象都有属性“name” 如何仅处理对象“abcd”?这将为您获取作为作业对象的值,您可以从中访问包含的值: var-serviceList=JArray.Parse(listString); var target=serviceList.Single(s=>s[“name”].ToString()

使用JSON库,我导入了一个对象数组:

dynamic serviceList = JsonConvert.DeserializeObject(listString)
我有一个json对象数组,每个对象都有属性“name”


如何仅处理对象“abcd”?

这将为您获取作为作业对象的值,您可以从中访问包含的值:

var-serviceList=JArray.Parse(listString);
var target=serviceList.Single(s=>s[“name”].ToString()==“abcd”);
如果(目标!=null)
{
变量类型=目标[“属性”][“类型”];
//等
}

解决此问题的正确方法是创建静态对象

Public Obj1 {

public string name {get;set;}
public Properties properties {get;set;}

}

Public Properties {

public string type {get;set;}

}

然后,您可以将JSON反序列化为一个
列表
,这样您就可以迭代列表并找到“name”:“abcd”对象
var myobj=mylist.FirstOrDefault(x=>x.name==“abcd”)
您可以使用Newtonsoft.json
JArray.parse()函数解析json数组

使用
FirstOrDefault()
获取名称为“abcd”的记录

输出:

{
  "name": "abcd",
  "properties": {
    "type": "1234"
  }
}

您可以这样访问它:

  for (int i = 0; i < serviceList.Count; i++)
  {
      if (serviceList[i].name == "abc")
      {
         DoSomethingWith(serviceList[i];
         break;
      }
  }
for(int i=0;i

编辑:没有看到您想要“abc”元素,因此相应地修改了代码。

您可以使用动态来执行您希望它执行的任何操作,因此没有任何东西会阻止您以以下方式评估结果:

dynamic selectionList = JsonConvert.DeserializeObject( json );

foreach (var item in selectionList) {
    if ( string.Equals( (string)item.name, "abcd", StringComparison.OrdinalIgnoreCase ) ) {
        Console.WriteLine( item );
    }
}
这将按照您最初的要求工作,但我认为您使自己比需要的困难得多:)

要了解它是如何工作的,您可以检查这个


我可能会基于规范创建一个类,但我假设属性是属性及其值的动态列表,这意味着您最终仍然会得到一个
字典

您为什么不想对定义的类型进行反序列化?或者为什么不只是使用JObject/JToken?没有,这只是我从微软得到的参考代码
  for (int i = 0; i < serviceList.Count; i++)
  {
      if (serviceList[i].name == "abc")
      {
         DoSomethingWith(serviceList[i];
         break;
      }
  }
dynamic selectionList = JsonConvert.DeserializeObject( json );

foreach (var item in selectionList) {
    if ( string.Equals( (string)item.name, "abcd", StringComparison.OrdinalIgnoreCase ) ) {
        Console.WriteLine( item );
    }
}