C# 使用startswith从动态对象获取属性
我想从json中获取以特定文本开始的所有属性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。否则,您将
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解决方案,效果很好。谢天谢地。谢谢