求解:请问如何通过XML动态生成一个对象

OriesMap 2006-05-23 11:17:46
具体如下:

比如我有一个xml文件
<?xml version="1.0" encoding="utf-8" ?>
<Root>
<AuthorInfo>
<property name='AuthorID' type='varchar' length='20'></property>
<property name='AuthorName' type='varchar' length='20'></property>
</AuthorInfo>
</Root>
则生成一个叫AuthorInfo的对象,对象有两个都分别为string的属性,AuthorID和AuthorName
如果xml文件为
<?xml version="1.0" encoding="utf-8" ?>
<Root>
<AuthorInfoExt>
<property name='AuthorID' type='varchar' length='20'></property>
<property name='AuthorName' type='varchar' length='20'></property>
<property name='Age' type='int' length='2'></property>
<property name='BirthDate' type='datetime' length='8'></property>
</AuthorInfoExt>
</Root>
则相应的生成AuthorInfoExt的对象,对象属性为如下:
string AuthorID;
string AuthorName;
int Age;
datetime BirthDate;


请问如何做?
...全文
308 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
OriesMap 2006-05-26
  • 打赏
  • 举报
回复
万事还得靠自己呀。
问题解决了。答案来自www.codeproject.com.

都不知帐已经结给谁好了。没有一个人给出的是我要的答案。
OriesMap 2006-05-25
  • 打赏
  • 举报
回复
看来用Emit是最好的办法了。
但是没有人给我出这样的答案。我这分数应该给谁呢?

继续期待关注中...
xlfd1999 2006-05-24
  • 打赏
  • 举报
回复
Type type = Assembly.GetExecutingAssembly().GetType("AuthorInfoExt");
object obj = Activator.CreateInstance(type);
type.GetProperty("AuthorID").SetValue(obj, value, null);
diandian82 2006-05-23
  • 打赏
  • 举报
回复
mark
liujiwe79 2006-05-23
  • 打赏
  • 举报
回复
Type type = Assembly.GetExecutingAssembly().GetType("AuthorInfoExt");
object obj = Activator.CreateInstance(type);
type.GetProperty("AuthorID").SetValue(obj, value, null);
OriesMap 2006-05-23
  • 打赏
  • 举报
回复
秋枫,这只是序列化,反序列化呢?
我想最重要也最难弄的是反序列化吧。

期待关注。
marvelstack 2006-05-23
  • 打赏
  • 举报
回复
使用序列化和反序列化,
http://www.microsoft.com/china/MSDN/library/archives/library/dndotnet/html/objserializ.asp
OriesMap 2006-05-23
  • 打赏
  • 举报
回复
动态编译那会很麻烦的。估计只能避开绕着走了。

那要是比如我有一个类
public class AuthorInfo
{
public AuthorInfo(){}
}

那么在临时从把xml中的属性给追加到AuthorInfo类上面,这样要怎样才能解决呢?
qpl007 2006-05-23
  • 打赏
  • 举报
回复

如果你想根据XML来完全动态生成一个程序集元数据中未描述类的对象,则只能用 CodeDom 来生成代码,然后在动态编译了。
qpl007 2006-05-23
  • 打赏
  • 举报
回复
如果程序集元数据中已经有 AuthorInfoExt 类和 AuthorInfo 类,你只是想动态生成他们的对象并用XML里的值来填充对象中的属性的话,用反射来做——

Type type = Assembly.GetExecutingAssembly().GetType("AuthorInfoExt");
object obj = Activator.CreateInstance(type);
type.GetProperty("AuthorID").SetValue(obj, value, null);

其中"AuthorInfoExt"、"AuthorID" 这些字符串和 value 从XML读取。
OriesMap 2006-05-23
  • 打赏
  • 举报
回复
xml操作很简单。但是动态生成指定结构的对象是难点。
fangwancong 2006-05-23
  • 打赏
  • 举报
回复
XML文件操作,请查看System.Xml命令空间。
特别留意XmlDocument类和XmlTextWriter类。
OriesMap 2006-05-23
  • 打赏
  • 举报
回复
帖子又死到这儿了。竟再没有人看了。
OriesMap 2006-05-23
  • 打赏
  • 举报
回复
期待有人给出比较可行的解决方案。

个人觉得序列化的方式虽然能够解决问题,但是不太灵活。
希望有那种从无到有的创建方式。当然尽量不用反射为好。
ilovejolly 2006-05-23
  • 打赏
  • 举报
回复
mark

111,094

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • AIGC Browser
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧