[英]Getting property from c# anonymous object
在服务器上,我得到 JSON 对象。 我使用 JsonConvert 将它们反序列化为匿名对象。 然后我想访问成员,但我不能做这样的事情:
object a = jsonObj.something.something.else;
所以我创建了以下内容,目的是能够使用选择器字符串数组访问成员。 但是,这里的 getProperty() 总是返回 null。 有任何想法吗?
private object recGetProperty(object currentNode, string[] selectors, int index) {
try {
Type nodeType = currentNode.GetType();
object nextNode = nodeType.GetProperty(selectors[index]);
if (index == (selectors.Length - 1)) {
return nextNode;
}
else {
return recGetProperty(nextNode, selectors, index + 1);
}
}
catch (Exception e) {
return null;
}
}
private object getProperty(object root, string[] selectors) {
return recGetProperty(root, selectors, 0);
}
JsonConvert.DeserializeObject
不会反序列化为匿名对象(我猜,你不使用JsonConvert.DeserializeAnonymousType )。 根据 json,它返回JObject
或JArray
。
1.由于JObject实现了IDictionary<string, JToken>
你可以这样使用
string json = @"{prop1:{prop2:""abc""}}";
JObject jsonObj = JsonConvert.DeserializeObject(json) as JObject;
Console.WriteLine(jsonObj["prop1"]["prop2"]);
或者
string str = (string)jsonObj.SelectToken("prop1.prop2");
2.如果要使用dynamic关键字,那么
dynamic jsonObj = JsonConvert.DeserializeObject(json);
Console.WriteLine(jsonObj.prop1.prop2);
两种方式都会打印abc
我的代码
Dictionary<string, object> dictionaryObject = new Dictionary<string, object>();
if (anonymousObject is string)
{
dictionaryObject = JsonConvert.DeserializeObject<Dictionary<string,object>>((string)anonymousObject);
}
if (!dictionaryObject.ContainsKey(propertyName))
{
throw new Exception($"property name '{propertyName}' not found");
}
object value = dictionaryObject[propertyName];
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.