C#是否可以在运行时创建新的类?

6

您好,是否可以在C#中创建新的类?这些类可以从XML中读取,并声明它们的属性也从XML中读取。

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

bests.


你的意思是实际上创建一个新的、前所未见的“类型”,还是只是一个现有类型的新“实例”? - Chris Wallis
如果您想使用上述XML创建一个类,那么它是非常不足的。例如,Age的类型会是什么?int、uint、short、byte?或者您想将所有字段都存储为字符串吗? - Devendra D. Chavan
看起来你正在尝试创建类型项(Person),而不是创建新类型的实例。 - Devendra D. Chavan
1
@Devendra D. Chavan,这个问题比较抽象,所以我不是在问关于个人项目的事情,那只是一个示例。关于数据类型,如果一个字段所有情况都只包含数字,我会将所有值转换为INT,因此这不是一项简单任务,而是我团队未来要解决的一个问题。这个应用程序基于人工智能。 - Rosmarine Popcorn
6个回答

10

我还要补充的是,他可能不需要完全新的类,而且通常使用LINQ to XML来处理XML。 - Dan Abramov

2
是的,它是可以做到的。 在这里,您可以找到如何操作的方法。
但是,您也可以将此结构存储在Map中,其中键为id,值为另一个Map,该Map存储属性,其中键为名称,值为值。

0

你需要使用反射API来完成这个复杂的任务。请描述你的场景,也许有更简单的方法。


0

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;
   }

1
他不打算创建新的对象。我认为XML文件的结构在编译时是未知的。他正在寻求创建新的类。 - Farshid Zaker
+1;我认为原问题并不清楚发帖者是想要创建一个新类型,还是仅将XML反序列化为现有类型。我认为后者更有可能。 - Polyfun
@ShellShock 我不是很了解 XML 的所有部分,只知道一些节点的内容。用户可以随意命名节点,比如说我们有一个人有四个名字!在这种情况下,我不想使用 String[] 或者 Generics,我需要声明四个字符串,像 Name1、Name2、Name3 和 Name4 这样。 - Rosmarine Popcorn

-1

这并不是很有意义。由于C#是强类型语言,在编译时你不会知道对象的样子,因此你无法使用它。

也许你最好创建一个使用字典的对象,其中键是节点名称。然后你可以查询字典以查找它具有哪些属性。


1
嗯,我的朋友,我计划拥有我的XML标准和想要使用我的应用程序的用户应该构建它的XML,但问题是我不想设置强标准,这样用户就会知道放什么,但在哪里放值和项目不是问题,如果我能达到我的目标,那就好了!@Ray - Rosmarine Popcorn

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接