person p = new person();
//我有一个xml配置文件,存储了类的属性名称和属性值,运行时读取属性和值,赋值给对象            var info = p.GetType().GetProperty("birthday");//这里模拟从配置文件读取属性名称
            if (info != null)
            {
               //设置属性的值
                info.SetValue(p, "2008-1-1", null);
            }
我从配置文件中读取的值都是字符串,因为我这个配置文件里存储的不仅仅是一个对象的信息,而是涉及到很多对象
而对象的属性可能涉及各种类型,如int decimal datetime。
这样我在执行上面的代码时遇到属性是int或其它的 就会出错
那我应该怎么做呢?总不能赋值前把所有的对象类型都判断一下吧?

解决方案 »

  1.   

    person p = new person();
    //我有一个xml配置文件,存储了类的属性名称和属性值,运行时读取属性和值,赋值给对象            var info = p.GetType().GetProperty("birthday");//这里模拟从配置文件读取属性名称
    try{
                if (info != null)
                {
                   //设置属性的值
                    info.SetValue(p, "2008-1-1", null);
                }
    }
    catch
    {
    //如果类型不匹配进行其它操作
    }
      

  2.   

    person p = new person(); 
    //我有一个xml配置文件,存储了类的属性名称和属性值,运行时读取属性和值,赋值给对象             var info = p.GetType().GetProperty("birthday");//这里模拟从配置文件读取属性名称 
    try{ 
                if (info != null) 
                { 
                  //设置属性的值 
                    info.SetValue(p, "2008-1-1", null); 
                } 

    catch 

    //如果类型不匹配进行其它操作 
      

  3.   

    这说明你的XML有问题啊,属性和值不匹配嘛。try catch一下当然也可以,不过最好控制一下数据源XML
      

  4.   


    - <root>
    - <BaseInfo>
      <Base DataSetID="e34aede627a8420f94f8bb37d9a6386d" DataSetName="11111" DataSetPath="D:\Edit\e34aede627a8420f94f8bb37d9a6386d\反冲起动轴组合-ok.dwg" CheckUser="Admin" ItemID="d6645df6-6bfa-4845-b065-82380fc7b31c" ItemName="11111" FormTableName="DT_PSE" /> 
      </BaseInfo>
    - <ItemInfo>
      <Item Guid="d6645df6-6bfa-4845-b065-82380fc7b31c" ID="d6645df6-6bfa-4845-b065-82380fc7b31c" ItemCode="11111" ItemName="11111" Item_type="2b321382-84eb-4771-9efe-c64136143344" Item_Version="A" /> 
      </ItemInfo>
    - <FormInfo>
      <Form Guid="a7156d14-b4fe-493c-8291-0bc1f59d38ff" name="ffff" age="0" birthdate="2009-9-12 13:48:55" /> 
      </FormInfo>
    - <DataSetInfo>
      <DataSet Guid="e34aede627a8420f94f8bb37d9a6386d" DatasetID="e34aede627a8420f94f8bb37d9a6386d" DatasetName="11111" CheckOutPath="D:\Edit\e34aede627a8420f94f8bb37d9a6386d\反冲起动轴组合-ok.dwg" CheckOutStatus="1" CheckOutUserID="Admin" /> 
      </DataSetInfo>
      <BomInfo /> 
      </root>这是我的配置文件,这里面涉及了4个对象 有 Item  Form  DataSet Bom 我要读取出来
    然后给那4个对象赋值。那我怎么在xml中控制类型啊
    况且我这个xml文件的属性也不是固定的,是由另外一个配置文件配置的
      

  5.   

    唉,自己搞定了 
    代码: var info = p.GetType().GetProperty("birthday");// var temp = Convert.ChangeType("2009-09-08 12:12:12", info.PropertyType);         if (info != null) 
               {
                   info.SetValue(u, temp, null);
               }