Json 如何获取动态对象属性
我从一个请求接收到一个Json对象,我想迭代它的属性并执行如下操作: 如果属性等于“EN”,则获取其值 我在web上看到的解决方案都与GetProperties/GetProperty方法相关,但我尝试了这两种方法,但都没有成功。 这应该是一些“简单”的东西,但我认为我在这里遗漏了一些东西Json 如何获取动态对象属性,json,asp.net-mvc,Json,Asp.net Mvc,我从一个请求接收到一个Json对象,我想迭代它的属性并执行如下操作: 如果属性等于“EN”,则获取其值 我在web上看到的解决方案都与GetProperties/GetProperty方法相关,但我尝试了这两种方法,但都没有成功。 这应该是一些“简单”的东西,但我认为我在这里遗漏了一些东西 //Deserializing the object ExpandoObject deserializedContent = JsonConvert.DeserializeObject<ExpandoO
//Deserializing the object
ExpandoObject deserializedContent = JsonConvert.DeserializeObject<ExpandoObject>(obj.ToString(), new ExpandoObjectConverter());
dynamic deserializedDynamicContent = deserializedContent;
//Tries
var value = deserializedDynamicContent.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public);
var value = deserializedDynamicContent.GetType().GetProperty("ES").GetValue();
我做错了什么
{
"EN":[{"Id":1,"Name":"One"},{"Id":2,"Name":"Two"},{"Id":3,"Name":"Tree"}],
"ES":[{"Id":1,"Name":"Uno"},{"Id":2,"Name":"Dos"},{"Id":3,"Name":"Tres"}],
"PT":[{"Id":1,"Name":"Um"},{"Id":2,"Name":"Dois"},{"Id":3,"Name":"Três"}]
}
我不确定您到底想要实现什么,但由于实现了
IDictionary
,您应该能够做到以下几点:
var expando = JsonConvert.DeserializeObject<ExpandoObject>(yourJson);
var dict = (IDictionary<string, object>)expando;
// look for a particular key...
object value;
if (dict.TryGetValue("EN", out value))
{
Console.WriteLine("Key exists!");
var list = (List<dynamic>)value;
Console.WriteLine(string.Join(",", list.Select(x => "{" + x.Id + "," + x.Name + "}")));
}
// or enumerate the entire dictionary...
foreach (var kvp in dict)
{
var list = (List<dynamic>)kvp.Value;
Console.WriteLine(
kvp.Key + ":" + string.Join(",", list.Select(x => "{" + x.Id + "," + x.Name + "}")));
}
var expando=JsonConvert.DeserializeObject(yourJson);
var dict=(IDictionary)expando;
//寻找一个特殊的钥匙。。。
目标价值;
if(dict.TryGetValue(“EN”,输出值))
{
WriteLine(“密钥存在!”);
var list=(list)值;
Console.WriteLine(string.Join(“,”,list.Select(x=>“{”+x.Id+”,“+x.Name+”}”);
}
//或者列举整个字典。。。
foreach(dict中的var kvp)
{
var list=(list)kvp.Value;
控制台写入线(
kvp.Key+”:“+string.Join(“,”,list.Select(x=>”{“+x.Id+”,“+x.Name+”}”);
}
我不确定您到底想实现什么,但由于实现了IDictionary
,您应该能够做到以下几点:
var expando = JsonConvert.DeserializeObject<ExpandoObject>(yourJson);
var dict = (IDictionary<string, object>)expando;
// look for a particular key...
object value;
if (dict.TryGetValue("EN", out value))
{
Console.WriteLine("Key exists!");
var list = (List<dynamic>)value;
Console.WriteLine(string.Join(",", list.Select(x => "{" + x.Id + "," + x.Name + "}")));
}
// or enumerate the entire dictionary...
foreach (var kvp in dict)
{
var list = (List<dynamic>)kvp.Value;
Console.WriteLine(
kvp.Key + ":" + string.Join(",", list.Select(x => "{" + x.Id + "," + x.Name + "}")));
}
var expando=JsonConvert.DeserializeObject(yourJson);
var dict=(IDictionary)expando;
//寻找一个特殊的钥匙。。。
目标价值;
if(dict.TryGetValue(“EN”,输出值))
{
WriteLine(“密钥存在!”);
var list=(list)值;
Console.WriteLine(string.Join(“,”,list.Select(x=>“{”+x.Id+”,“+x.Name+”}”);
}
//或者列举整个字典。。。
foreach(dict中的var kvp)
{
var list=(list)kvp.Value;
控制台写入线(
kvp.Key+”:“+string.Join(“,”,list.Select(x=>”{“+x.Id+”,“+x.Name+”}”);
}