使用startswith从动态对象获取属性

时间:2017-11-02 12:24:02

标签: c# json linq json.net

我想从json获取StartsWith特定文本的所有属性

dynamic results = JsonConvert.DeserializeObject<dynamic>(json);

所以下面是我得到的结果

{"abc" : "Text", "abcde" : "Text2","prop" : "myprop"}

是否可以执行类似

的操作
results.Where(x => x.StartsWith("abc"))

2 个答案:

答案 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;
    }
}