2011-06-03 71 views
6

嗨有可能在C#中创建新类,应用程序从XML中读取并声明它们是属性也从XML中读取的类。 喜欢:是否有可能在RunTime C上创建新类#

<item id=1> 
<Name>John</Name> 
<Surname>Kennedy</Surname> 
<Age>24</Age> 
</item> 

最好成绩。

+0

你的意思实际上是创建一个新的,以前从未见过 - ,*型*,或现有的只是一个新的*实例*类型? – 2011-06-03 08:13:03

+0

如果你正在尝试用上面的xml创建一个类,那么它是可悲的不足。例如,年龄的类型是什么? int,uint,short,byte?或者你想将所有字段存储为字符串? – 2011-06-03 12:20:50

+0

看起来您正尝试创建类型项目('Person')的实例,而不是创建新类型。 – 2011-06-03 12:21:53

回答

9

是的,它是与System.Reflection.Emit命名空间。

但是,在.net 4.0中,您可以使用动态密钥。像这样http://blogs.msdn.com/b/mcsuksoldev/archive/2010/02/04/dynamic-xml-reader-with-c-and-net-4-0.aspx

不动,即使你创建新类,则需要反射来访问它们的属性

+1

很好的参考。 – 2011-06-03 08:13:21

+0

我还想补充一点,他不需要一个全新的类,而使用XML通常使用LINQ to XML来完成。 – 2011-06-03 08:45:58

0

你可以反序列化这个XML在一个新的类!尝试这样的:

public static T DeserializeObject<T>(string filePath) 
    { 
     XmlDocument doc = new XmlDocument(); 
     doc.Load(filePath); 
     XmlNodeReader reader = new XmlNodeReader(doc.DocumentElement); 
     XmlSerializer ser = new XmlSerializer(typeof(T)); 
     object obj = ser.Deserialize(reader); 

     return (T)obj; 
    } 
+0

他没有在寻找创建新的对象。我认为XML文件的结构在编译时并不知道。他正在要求创建新班级。 – 2011-06-03 08:07:06

+0

+1;我不认为从最初的问题来看,这个海报是想创建一个新类型,还是仅仅将xml反序列化为一个现有类型。我认为后者更可能。 – Polyfun 2011-06-03 10:31:13

+0

@ShellShock我不知道所有XML的一部分只有一些东西,但用户可以命名的节点无论它想要什么,让我们说有4个名字的人!在这种情况下,我不想使用String []或泛型我需要声明4个字符串,如Name1 Name2 Name3 Name4。 – Burimi 2011-06-03 14:55:40

0

你必须使用反射api做这是一件很复杂的事情。请描述你的情况。也许有更简单的方法。

0

我真的没有意义。因为C#是强类型的,所以你不会在编译类型上知道对象是什么样的,所以你不能使用它。

也许你最好制作一个使用Dictionary作为节点名称的对象。然后,您可以查询字典以查找它具有的属性。

+0

那么我的朋友im计划有我的XML标准和用户谁想要使用我的应用程序应该构建它的XML,但问题是我不想把一个强的标准,使用户将知道该怎么把,但放在哪里如果我能达到我的问题的目标,价值观和项目不会成为问题! @Ray – Burimi 2011-06-03 14:53:27

2

是的。

Here你可以找到如何。

但是,除此之外,您还可以将此结构存储在Map中,其中键和id以及值是存储属性的其他映射,其中键是名称,值是值。

相关问题