一般来说,传入的 result 将会具有自己的子类型,也就是说调用方知道自己传入的是什么类型,所以就不存在类型转换的问题。
你可以把调用这段代码的外部代码稍微描述下。
foreach (JToken item in softArray) { SimpleSoft s = new SimpleSoft(); Type t = s.GetType(); Object ob; foreach (PropertyInfo p in t.GetProperties()) { string name = p.Name; ob = (object)item.SelectToken(name); p.SetValue(s, reader.ReadContentAs(ob, null); } softList.Add(s); }
但是会提示类型错误
@逆流三千里丶: reader.ReadContentAs(ob, null) 的返回类型是什么?
@程序猿.码农: 上面代码copy错了是
p.SetValue(s,ob, null);
现在目前的办法是自己写方法转换
@逆流三千里丶: item.SelectToken(name) 返回的数据类型是什么?我想说明的是, p.SetValue(s,a);
a的类型必须和 p.PropertyType 相同。
@程序猿.码农: SelectToke(name)返回的是JSON的一种类型。我原来的想法是可以用变量通过反射为对应该的类型,因为SimpleSoft只有5种类型,就是想比如为string则把 SelectToke(name)转为string,int则转为int
@逆流三千里丶: C#里没有什么JSON类型,我猜测你的意思是 SelectToken 返回的是以JSON格式表示的字符串,所以 SelectToken 返回应该是 string 类型. 因此,你应该用JSON反序列化成对象,然后再设置属性。
@程序猿.码农: 恩恩JSON是第三方的插件,现在自己写的方法进行转换可以了,很感谢你的回答。
可以考虑用泛型。