我想从json获取StartsWith特定文本的所有属性
dynamic results = JsonConvert.DeserializeObject<dynamic>(json);
所以下面是我得到的结果
{"abc" : "Text", "abcde" : "Text2","prop" : "myprop"}
是否可以执行类似
的操作results.Where(x => x.StartsWith("abc"))
答案 0 :(得分:2)
只需检索result
- 对象的运行时类型,并使用Type.GetProperties
查询其属性:
var type = results.GetType();
type.GetProperties().Where(x => x.Name.StartsWith("abc"));
编辑:因为调用dynamic
实例的任何方法都是dynamic
,所以您必须将results.GetType
的结果转换为Type
。否则你会得到一个编译器错误,说明你不能在动态绑定操作上使用匿名方法。
var type = (Type)results.GetType();
答案 1 :(得分:2)
您可以简单地使用results.GetType().GetProperties()
,它将为您提供反序列化的JSON对象中存在的属性数组。
然后,您可以迭代该数组以获取PropertyInfo
以{1}}以所需字符串开头的Name
个对象,并调用GetValue()
以获取属性&#39;感兴趣的价值。
或者你根本就没有反序列化,但解析对象并将其视为JSON:
var jObject = JObject.Parse(jsonString);
foreach (var rootProperty in jObject)
{
if (rootProperty.Key.StartsWith("whatever"))
{
var valueOfInterest = rootProperty.Value;
}
}