XML序列化Roslyn SyntaxTree?

时间:2013-02-08 10:36:29

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

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

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

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

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

1 个答案:

答案 0 :(得分:3)

Roslyn是一个开放的编译器。我假设您可以直接插入自己的代码来遍历AST并以XML格式转储它。鉴于它打开,假设您可以实现自己的读取转储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#,以及许多有用的API,用于检查/修改/生成它构建的AST代码。 (XSL对于分析AST的作用远不如你想象的那么有用;它不能理解“上下文”[例如,周围的范围和声明],它们赋予程序他们的意义。)