2013-02-08 34 views
5

我正在尋找將C#轉換爲XML以及再次反序列化回C#的選項。任何人都知道現有的解決方案嗎?我假設Roslyn SyntaxTree不是Xml序列化的。我還假設爲一個syntaxtree製作一個xml-serializer將是一個相當大的任務。但是,不是嗎?XML序列化Roslyn SyntaxTree?

爲什麼我需要這個?我想通過xsl生成xml模型到syntaxtree-xml,然後到c#(或者maye vb)。

我不想直接從XSL生成C#(可以完成,但我不覺得它是理想的)。我需要XSL,因爲我也要從XML模型生成XAML和HTML,並且還希望能夠生成需要的任何代碼等。

我知道T4模板,但現在我由於各種原因,我正在尋找其他選擇。

+0

是否要將語法樹序列化爲XML,或者只是反序列化?或兩者? – svick

+0

兩者都會很好。 –

+0

爲什麼?你提到的用例似乎只需要反序列化。我認爲正確地進行序列化會更困難,因爲這意味着您必須處理C#支持的所有內容。如果只有反序列化,則不需要擔心C#在XML中可以執行的所有操作。 – svick

回答

3

Roslyn是一個開放的編譯器。我假設你可以直接插入自己的代碼來遍歷AST並將其轉儲爲XML格式。鑑於它開放,presumbly你可以實現你自己的擴展到讀取你傾銷的XML,並建立一個Roslyn AST(我認爲可以然後是漂亮的印刷)。這似乎很多工作。

對於罐裝解決方案,請參閱C# AST in XML。對於該解決方案,也需要類似的讀XML-to-make-AST。

您可能不想將樹用於XML;這樣的文件通常是巨大的。請參閱What would an AST (abstract syntax tree) for an object-oriented programming language look like?

您可能更適合在解析和構建AST的工具環境中進行操作,直接對這些AST執行操作,然後對結果進行相應打印。我們的DMS系統既有解析(前兩個示例所示),也包括許多語言的漂亮打印,包括已經內置的C#,以及許多用於檢查/修改/構建AST代碼的API。 (XSL對分析AST的用處遠遠不如你想象的那麼有用;它不瞭解給出程序意義的「上下文」[例如,周圍的範圍和聲明])。