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

C# 使用startswith从动态对象获取属性,c#,json,linq,json.net,C#,Json,Linq,Json.net,我想从json中获取以特定文本开始的所有属性 dynamic results = JsonConvert.DeserializeObject<dynamic>(json); 有可能做像这样的事情吗 results.Where(x => x.StartsWith("abc")) 只需检索结果-对象的运行时类型,并使用以下方法查询其属性: 编辑:因为对dynamic实例调用的任何方法也是dynamic,所以必须将results.GetType的结果强制转换为Type。否则,您将

我想从json中获取以特定文本开始的所有属性

dynamic results = JsonConvert.DeserializeObject<dynamic>(json);
有可能做像这样的事情吗

results.Where(x => x.StartsWith("abc"))

只需检索
结果
-对象的运行时类型,并使用以下方法查询其属性:

编辑:因为对
dynamic
实例调用的任何方法也是
dynamic
,所以必须将
results.GetType
的结果强制转换为
Type
。否则,您将得到一个编译器错误,说明您不能在动态绑定操作上使用匿名方法

var type = (Type)results.GetType();

只需检索
结果
-对象的运行时类型,并使用以下方法查询其属性:

编辑:因为对
dynamic
实例调用的任何方法也是
dynamic
,所以必须将
results.GetType
的结果强制转换为
Type
。否则,您将得到一个编译器错误,说明您不能在动态绑定操作上使用匿名方法

var type = (Type)results.GetType();

您可以简单地使用
results.GetType().GetProperties()
,这将为您提供反序列化JSON对象中的属性数组

然后,您可以迭代该数组以获取
PropertyInfo
对象,这些对象的
Name
以您想要的字符串开头,然后调用
GetValue()
以获取感兴趣的属性值

或者根本不进行反序列化,而是解析对象并将其视为JSON:

var jObject = JObject.Parse(jsonString);

foreach (var rootProperty in jObject)
{
    if (rootProperty.Key.StartsWith("whatever"))
    {
        var valueOfInterest = rootProperty.Value;
    }
}

您可以简单地使用
results.GetType().GetProperties()
,这将为您提供反序列化JSON对象中的属性数组

然后,您可以迭代该数组以获取
PropertyInfo
对象,这些对象的
Name
以您想要的字符串开头,然后调用
GetValue()
以获取感兴趣的属性值

或者根本不进行反序列化,而是解析对象并将其视为JSON:

var jObject = JObject.Parse(jsonString);

foreach (var rootProperty in jObject)
{
    if (rootProperty.Key.StartsWith("whatever"))
    {
        var valueOfInterest = rootProperty.Value;
    }
}

我尝试过这个,但它确实让我在动态类型上使用lambda表达式谢谢@HimBromBeere。但我使用了CodeCaster解决方案。我已经尝试过了,但它确实允许我在动态类型上使用lambda表达式谢谢@HimBromBeere。但我用了CodeCaster解决方案,效果很好。谢天谢地。谢谢