C# 如何从json数组中寻址对象
使用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()
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.jsonJArray.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 );
}
}