如何解决CodeTypeReference.ArrayRank 替代
我正在使用 CodeDom 从 XSD 文件构建智能类。 为此,我创建我执行以下操作
XmlSchemaimporter schemaimporter = new XmlSchemaimporter(xsds);
CodeNamespace codeNamespace = new CodeNamespace(settings.Nmspace);
// export the code inside the namespace
XmlCodeExporter codeExporter = new XmlCodeExporter(codeNamespace,null,CodeGenerationoptions.GenerateProperties);
// load objects fromm the XSD
var maps = new List<XmlTypeMapping>();
foreach (XmlSchema schema in xsds)
{
if (settings.UseTypes)
{
foreach (XmlSchemaType schemaT in schema.SchemaTypes.Values)
maps.Add(schemaimporter.ImportSchemaType(schemaT.Qualifiedname));
}
if (settings.UseElements)
{
foreach (XmlSchemaElement schemaT in schema.Elements.Values)
maps.Add(schemaimporter.ImportTypeMapping(schemaT.Qualifiedname));
}
//if (settings.UseNotations)
// {
// foreach (XmlSchemaNotation schemaT in schema.Notations.Values)
// maps.Add(schemaimporter.ImportTypeMapping(schemaT.Qualifiedname));
// }
}
// export all selected objects to the namespace code
foreach (var map in maps)
codeExporter.ExportTypeMapping(map);
// process the files to update classes and other objects
CodeNamespace newCodeNamespace = PostProcess(settings,codeNamespace);
XSD 内部是一些多维数组(在生成的代码中提供类似“byte[][] myarray;”的内容)。
当我解析在 XSD 中找到的所有成员并且解析器到达这些多维数组之一时,CodeMemberField 或 CodeMemberProperty 包含一个 Type 属性,该属性包含一个 ArrayRank 属性,该属性应该指示数组的维数 (https://docs.microsoft.com/en-us/dotnet/api/system.codedom.codetypereference.arrayrank?view=dotnet-plat-ext-5.0 )
然而,property.Type.ArrayRank 总是设置为 1,无论维数是多少。 当我调试应用程序时,我可以看到名为 nestedArrayDepth 的 Type one(它是 CodeTypeReference)中的另一个属性表示 2(正确的维数),而 ArrayRank 仍然设置为 1,如您所见
我不知道这是框架中的错误还是故意的。
我的问题是:如何使用 CodeDom 获得实际的维数?有什么我不知道或不怀疑的技巧吗?
解决方法
我终于找不到办法了。 它实际上是一个锯齿状数组,尽管 CodeDom 似乎可以识别它,但我不知道如何获取信息。
我通过替换 byte[][] 类型 bu objects[] 类型解决了我的问题,并且会在访问这些数据时处理我正在做的事情,直到我找到另一种方法。
好难过……
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。