C#使用反射从不同名称类的属性中获取图片URL的问题求助
解决方案1:对实例二次反射取值
你不需要强转类型,由于8个图片类的尺寸属性命名规则统一(比如你提到的_1/_2/_3对应不同尺寸),直接对拿到的实例对象继续用反射读取对应属性即可,示例代码如下:
PropertyInfo[] properties = typeof(Photos).GetProperties(); foreach (PropertyInfo property in properties) { object imgInstance = property.GetValue(mm); if(imgInstance == null) continue; // 按需替换为你要取的尺寸对应属性名,比如此处取_1对应的URL PropertyInfo sizeProp = imgInstance.GetType().GetProperty("_1"); if(sizeProp != null) { string imgUrl = sizeProp.GetValue(imgInstance) as string; // 此处即可处理拿到的图片URL } }
提示:如果你的尺寸存储是公开字段而非属性,把上述代码中的
GetProperty替换为GetField即可。
解决方案2:优化反序列化逻辑简化操作
如果后续需要频繁操作这些图片属性,可以在反序列化阶段做适配,避免多次反射:
- 定义统一的图片尺寸接口,包含3个尺寸对应的属性,让8个图片类都实现该接口,拿到实例后直接转为接口类型操作即可
- 不想定义多个实体类的话,也可以直接用Newtonsoft的
JObject解析该部分结构,直接通过键名取值:string url = imgInstance["_1"].ToString()
内容的提问来源于stack exchange,提问作者CrazyDonkeys
相关产品推荐
相关产品推荐

