none
xsd.exe 根据xsd文档集生成的类有问题 RRS feed

  • 问题

  • 在使用xsd.exe 将xsd文档集生成类以后 发现其生成的类集有错,简要描述是,“它省略了中间类导致类型转化错误”

    示意例子:

     <xs:complexType name="type1">

    <xs:sequence>

    <xs:element name="ele1" type="xs:int" minOccurs="1" maxOccurs="unbounded"/>

           </xs:sequence>

     </xs:complexType>

    <xs:complexType name="type2">

    <xs:sequence>

    <xs:element name="ele2" type="type1" minOccurs="1" maxOccurs="unbounded"/>

    </xs:sequence>

    </xs:complexType>

    -----------------------

    public class type2{


            [System.Xml.Serialization.XmlArrayItemAttribute("ele2", typeof(int), IsNullable = false)]

     public int[][] ele1;

    }

    ---------------

    System.InvalidOperationException: 无法生成临时类(result=1)。
    error CS0030: 无法将类型“Bowen.Office.Excel.Service.TypeService.CT_Col[]”转换为“Bowen.Office.Excel.Service.TypeService.CT_Col”
    error CS0029: 无法将类型“Bowen.Office.Excel.Service.TypeService.CT_Col”隐式转换为“Bowen.Office.Excel.Service.TypeService.CT_Col[]”

    ----

    这是在实际过程中我报的错误,就是这样 

    这是个bug 怎么办 我只能把 [][] 手动改成[] 然后 它就运转正常了,但我觉得它还是不应该把  type2给省略了


    project discovery developer

    2015年12月2日 6:49

全部回复

  • <xsd:complexType name="CT_MetadataBlocks">
    3261 <xsd:sequence>
    3262 <xsd:element name="bk" type="CT_MetadataBlock" minOccurs="1" maxOccurs="unbounded"/>
    3263 </xsd:sequence>
    3264 <xsd:attribute name="count" type="xsd:unsignedInt" use="optional" default="0"/>
    3265 </xsd:complexType>

    3266 <xsd:complexType name="CT_MetadataBlock">
    3267 <xsd:sequence>
    3268 <xsd:element name="rc" type="CT_MetadataRecord" minOccurs="1" maxOccurs="unbounded"/>
    3269 </xsd:sequence>
    3270 </xsd:complexType>

    3271 <xsd:complexType name="CT_MetadataRecord">
    3272 <xsd:attribute name="t" type="xsd:unsignedInt" use="required"/>
    3273 <xsd:attribute name="v" type="xsd:unsignedInt" use="required"/>
    3274 </xsd:complexType>

    -----------------------------------------

        /// <remarks/>
        [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.81.0")]
        [System.SerializableAttribute()]
        [System.Diagnostics.DebuggerStepThroughAttribute()]
        [System.ComponentModel.DesignerCategoryAttribute("code")]
        [System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://schemas.openxmlformats.org/spreadsheetml/2006/main")]
        public partial class CT_MetadataBlocks {
            /// <remarks/>
            [System.Xml.Serialization.XmlArrayItemAttribute("rc", typeof(CT_MetadataRecord), IsNullable = false)]
            public CT_MetadataRecord[][] bk;
            /// <remarks/>
            [System.Xml.Serialization.XmlAttributeAttribute()]
            [System.ComponentModel.DefaultValueAttribute(typeof(uint), "0")]
            public uint count;
            public CT_MetadataBlocks() {
                this.count = ((uint)(0));
            }
        }


    project discovery developer

    2015年12月2日 7:25