首页 新闻 会员 周边

如何把字符串反射成为对应的数据类型

0
悬赏园豆:15 [已解决问题] 解决于 2012-08-01 16:02

比如:

ClassA a=0;

Object  resutl; 
Type t=a.GetType();

foreach (PropertyInfo p in t.GetProperties())
{
Type pType=p.GetType();
string name=pType.Name; 
p.SetValues(a,result,
null);
}

现在问题就是如何把result的类型转化为和name对于的类型

風吹云动的主页 風吹云动 | 初学一级 | 园豆:69
提问于:2012-08-01 14:42
< >
分享
最佳答案
1

一般来说,传入的 result 将会具有自己的子类型,也就是说调用方知道自己传入的是什么类型,所以就不存在类型转换的问题。

你可以把调用这段代码的外部代码稍微描述下。

收获园豆:15
Launcher | 高人七级 |园豆:45045 | 2012-08-01 14:50
      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);
            }

但是会提示类型错误

風吹云动 | 园豆:69 (初学一级) | 2012-08-01 15:12

@逆流三千里丶: reader.ReadContentAs(ob, null) 的返回类型是什么?

Launcher | 园豆:45045 (高人七级) | 2012-08-01 15:20

@程序猿.码农: 上面代码copy错了是

      p.SetValue(s,ob, null);
现在目前的办法是自己写方法转换
風吹云动 | 园豆:69 (初学一级) | 2012-08-01 15:36

@逆流三千里丶: item.SelectToken(name) 返回的数据类型是什么?我想说明的是, p.SetValue(s,a);

a的类型必须和 p.PropertyType 相同。

Launcher | 园豆:45045 (高人七级) | 2012-08-01 15:40

@程序猿.码农: SelectToke(name)返回的是JSON的一种类型。我原来的想法是可以用变量通过反射为对应该的类型,因为SimpleSoft只有5种类型,就是想比如为string则把 SelectToke(name)转为string,int则转为int

風吹云动 | 园豆:69 (初学一级) | 2012-08-01 15:47

@逆流三千里丶: C#里没有什么JSON类型,我猜测你的意思是 SelectToken 返回的是以JSON格式表示的字符串,所以 SelectToken 返回应该是 string 类型. 因此,你应该用JSON反序列化成对象,然后再设置属性。

Launcher | 园豆:45045 (高人七级) | 2012-08-01 15:51

@程序猿.码农: 恩恩JSON是第三方的插件,现在自己写的方法进行转换可以了,很感谢你的回答。

風吹云动 | 园豆:69 (初学一级) | 2012-08-01 16:02
其他回答(1)
-1

可以考虑用泛型。

寒风吹过 | 园豆:149 (初学一级) | 2012-08-01 15:18
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册