嗨有可能在C#中創建新類,應用程序從XML中讀取並聲明它們是屬性也從XML中讀取的類。 喜歡:是否有可能在RunTime C上創建新類#
<item id=1>
<Name>John</Name>
<Surname>Kennedy</Surname>
<Age>24</Age>
</item>
最好成績。
嗨有可能在C#中創建新類,應用程序從XML中讀取並聲明它們是屬性也從XML中讀取的類。 喜歡:是否有可能在RunTime C上創建新類#
<item id=1>
<Name>John</Name>
<Surname>Kennedy</Surname>
<Age>24</Age>
</item>
最好成績。
是的,它是與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
不動,即使你創建新類,則需要反射來訪問它們的屬性
很好的參考。 – 2011-06-03 08:13:21
我還想補充一點,他不需要一個全新的類,而使用XML通常使用LINQ to XML來完成。 – 2011-06-03 08:45:58
你可以反序列化這個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;
}
他沒有在尋找創建新的對象。我認爲XML文件的結構在編譯時並不知道。他正在要求創建新班級。 – 2011-06-03 08:07:06
+1;我不認爲從最初的問題來看,這個海報是想創建一個新類型,還是僅僅將xml反序列化爲一個現有類型。我認爲後者更可能。 – Polyfun 2011-06-03 10:31:13
@ShellShock我不知道所有XML的一部分只有一些東西,但用戶可以命名的節點無論它想要什麼,讓我們說有4個名字的人!在這種情況下,我不想使用String []或泛型我需要聲明4個字符串,如Name1 Name2 Name3 Name4。 – Burimi 2011-06-03 14:55:40
你必須使用反射api做這是一件很複雜的事情。請描述你的情況。也許有更簡單的方法。
我真的沒有意義。因爲C#是強類型的,所以你不會在編譯類型上知道對象是什麼樣的,所以你不能使用它。
也許你最好製作一個使用Dictionary作爲節點名稱的對象。然後,您可以查詢字典以查找它具有的屬性。
那麼我的朋友im計劃有我的XML標準和用戶誰想要使用我的應用程序應該構建它的XML,但問題是我不想把一個強的標準,使用戶將知道該怎麼把,但放在哪裏如果我能達到我的問題的目標,價值觀和項目不會成爲問題! @Ray – Burimi 2011-06-03 14:53:27
你的意思實際上是創建一個新的,以前從未見過 - ,*型*,或現有的只是一個新的*實例*類型? – 2011-06-03 08:13:03
如果你正在嘗試用上面的xml創建一個類,那麼它是可悲的不足。例如,年齡的類型是什麼? int,uint,short,byte?或者你想將所有字段存儲爲字符串? – 2011-06-03 12:20:50
看起來您正嘗試創建類型項目('Person')的實例,而不是創建新類型。 – 2011-06-03 12:21:53