将XSD编译为C#对象包括命名空间
本文关键字:对象 包括 命名空间 XSD 编译 | 更新日期: 2023-09-27 17:58:02
我正在从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();
}
您的代码示例的工作原理是,它将生成的代码放在您在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#使用生成的程序集会很痛苦。
我觉得你的问题/例子中可能缺少一些细节,这可能不是你想要的信息;然而,我相信这个答案与你所提供的是一致的。