5

我正在寻找将 C# 转换为 XML 并再次反序列化回 C# 的选项。任何人都知道任何现有的解决方案吗?我假设 Roslyn SyntaxTree 不是 Xml 可序列化的。我还假设为语法树制作 xml-serializer 将是一项艰巨的任务。但也许不是?

为什么我需要这个?我想通过 xsl 从 xml 模型生成代码到 syntaxtree-xml,然后到 c#(或者可能是 vb)。

我不想直接从 XSL 生成 C#(可以做到,但我觉得不理想)。我需要 XSL,因为我还将从 XML 模型生成 XAML 和 HTML,并且我还希望能够在需要的后面生成任何代码等。

我知道 T4 模板,但现在出于各种原因我正在寻找其他选项。

4

1 回答 1

3

Roslyn 是一个开放编译器。我假设您可以直接插入自己的代码来遍历 AST 并将其转储为 XML 格式。鉴于它开放的,大概您可以实现自己的扩展来读取您转储的 XML,并构建一个 Roslyn AST(我认为它可以被漂亮地打印出来)。这似乎是很多工作。

有关固定解决方案,请参阅XML 中的 C# AST。该解决方案也需要类似的 read-XML-to-make-AST。

您可能不想将 XML 用于树;此类文件通常很大。请参阅面向对象编程语言的 AST(抽象语法树)是什么样的?.

最好在解析和构建 AST 的工具的上下文中操作,直接在这些 AST 上进行操作,然后漂亮地打印结果。我们的 DMS 系统具有对许多语言的解析(如前两个示例所示)和漂亮打印,包括已经内置的 C#,以及许多有用的 API,用于从它构造的 AST 检查/修改/生成代码。(XSL 对于分析 AST 的用处远没有您想象的那么有用;它不理解赋予程序意义的“上下文”[例如,周围的范围和声明])。

于 2013-02-08T10:51:12.757 回答