编译XSD到C#对象包括命名空间

时间:2013-02-06 13:01:46

标签: c# .net namespaces xsd schema

我从XSD文件生成对象和类es。但是在一个名称空间下创建的类而不是XSD的目标名称空间。 如何编译模式,应该在命名空间下生成类?

以下是我的代码示例:

// generate an assembly representing the given schema:
var codeNamespace = new CodeNamespace(namespaceName);
var codeProvider = new CSharpCodeProvider();
var codeGenerationOptions = new CodeGeneratorOptions();
using (var writer = new StringWriter())
{
    codeProvider.GenerateCodeFromNamespace(codeNamespace, writer,
                                           codeGenerationOptions);
    code = writer.ToString();
}

1 个答案:

答案 0 :(得分:0)

您的代码示例的工作原理是它将生成的代码放在您在namespaceName变量中指定的命名空间中。如果您希望命名空间与XSD匹配,则可以相应地设置namespaceName变量。

例如,如果我在示例代码中定义string namespaceName = "My.Namespace.One";,则代码的结果值为"namespace My.Namespace.One {\r\n\r\n}"

因此,您只需要从XSD读取命名空间并将其分配给namespaceName如果您的问题是您想要使用多个命名空间,那么问题与您如何处理代码的XSD有关生成,在您的示例中根本没有显示。

但是,为了实际编译您生成的代码,命名空间需要符合C#限制。像http://schemas.microsoft.com/winfx/2006/xaml这样的命名空间不能在C#中编译。那个命名空间可能(我不确定)在IL字节代码级别是有效的,但即使它是我真的想知道你在做什么是值得花费那种努力,特别是考虑到C#使用生成的程序集会很痛苦。

我觉得您的问题/示例中可能缺少某些细节,这可能不是您要查找的信息;但是,我相信这个答案与你所提供的一致。