【问题标题】:XML serialize Roslyn SyntaxTree?XML序列化Roslyn SyntaxTree?
【发布时间】:2013-01-24 02:30:36
【问题描述】:

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

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

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

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

【问题讨论】:

  • 您想将语法树序列化为 XML,还是仅仅反序列化?还是两者兼而有之?
  • 为什么?您提到的用例似乎只需要反序列化。而且我认为正确地进行序列化会更加困难,因为这意味着您必须处理 C# 支持的所有内容。如果您只有反序列化,则无需担心在 XML 中表示 C# 可以执行的所有操作。
  • 我希望能够编写 C# 并将其转换为 XML 以插入到我的 XSL 中。它不如从 XML 转换为 C# 重要,但它会很好。

标签: c# xml-serialization code-generation roslyn


【解决方案1】:

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

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

您可能不想将 XML 用于树;此类文件通常很大。见What would an AST (abstract syntax tree) for an object-oriented programming language look like?

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-05
    • 1970-01-01
    • 1970-01-01
    • 2021-06-13
    • 2020-02-28
    • 1970-01-01
    • 2011-05-12
    相关资源
    最近更新 更多