原来是用delphi写的代码,现在需要移至C#上,咱是新手刚上路
delphi中如果published了某个属性,可以通过PropType(Obj, strPropName)函数来得到属性的类型,GetStrProp函数来得到某个属性值,不知在c#中应该如何处理,有相关代码最好原始需求:
需要将xml文件中对应节点的值直接转换到某个对象的相应属性中,考虑到扩展性,需要做成动态的
如xml文件格式
<Data><usrid><usrid>1<usrno>test</usrno></Data>
某个业务类声明
TUsr
public int usrid;
public string usrno;
...假设这么调用
TUsr oUsr = new TUsr();
oUsr.loadfromxml();  //在这里跟据nodename, nodevalue可以获取xml中的值动态,
//调用后ousr.usrid= 1 ousr.usrno="test"不知在C#里类似的处理应该如何实现,先谢了

解决方案 »

  1.   

    to 不知在C#里类似的处理应该如何实现,先谢了对你所说的,好像是序列化和反序列化
    [Serializable]
    public class userinfo
    {
       public int userid;
       public string userno;
    }//Save it into xml file
    userinfo myData = new userinfo();
    BinaryFormatter Bf = new BinaryFormatter();
    FileStream fs = new FileStream("DataFile.dat", FileMode.Create);
    Bf.Serialize( fs,myData);//Read it from xml file
    FileStream fs = new FileStream("DataFile.dat", FileMode.Open);
    BinaryFormatter Bf = new BinaryFormatter();
    userinfo myData = Bf.Deserialize( fs ) as userinfo;
    if( myData != null )
    {
         //Access its data here
    }
      

  2.   

    to Knight94(愚翁):
       首先谢谢您的热心回复,刚才我查了一下MSDN,大概了解serialize 和 Deserialize的用法,感觉这也是一种解决方法,但用这种方式,还是无法达到我所说的"动态指定"的效果.
       因为serialize 和Deserialize,应该就是按顺序把属性值存储起来(按我的理解),如果增加或者删除了某个属性,那么原有的.dat文件应该无法读取出来,而且我用editplus打开了存储的.dat文件,格式上和xml文件还是相差比较大.考虑用xml格式处理,就是为了尽可能地灵活,方便扩展和修改,如虽然类里面声明了两个属性,但传回来的xml格式也可能只包含了其中一个属性值
    <Data><usrid>1</usrid></Data>
    这时就意味着usrno属性为空字符串(有时为了减少传输大小,需要这么处理)
      

  3.   

    用序列化,反序列化,完全可以自定义Serializer,来处理你提到的usrno属性为空节点的问题
      

  4.   

    谢谢大家的热心支持, ^_^我觉得反射技术还是挺适合在这里用的,序列化,反序列化我可能有机会再慢慢研究吧, 毕竟解决问题是首要的.反射技术的文章,这里有一篇写得不错:
    http://www.cnblogs.com/fineboy/archive/2005/09/02/228684.aspx