微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

CodeTypeReference.ArrayRank 替代

如何解决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,如您所见

enter image description here

我不知道这是框架中的错误还是故意的。

我的问题是:如何使用 CodeDom 获得实际的维数?有什么我不知道或不怀疑的技巧吗?

解决方法

我终于找不到办法了。 它实际上是一个锯齿状数组,尽管 CodeDom 似乎可以识别它,但我不知道如何获取信息。

我通过替换 byte[][] 类型 bu objects[] 类型解决了我的问题,并且会在访问这些数据时处理我正在做的事情,直到我找到另一种方法。

好难过……

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。