我有一个xsd和一个由xsd.exe生成的类,用于反序列化XML文档。出于某种原因,XML文档中相当深的一个节点无法反序列化,我找不到它为什么会这样做…
以下是我反序列化的方法:
XmlSchema schema = XmlSchema.Read(XmlReader.Create("X12_00401_271.xsd"), null);
XmlSerializer _xSerializer = new XmlSerializer(typeof(X12_00401_271));
using (XmlReader _xReader = XmlReader.Create(path))
{
_xResponse = _xSerializer.Deserialize(_xReader) as X12_00401_271;
}
XSD的相关部分如下所示:
<xs:element name="TS271A1_2110C_Loop">
<xs:annotation>
<xs:appinfo>
<b:recordInfo structure="delimited" delimiter_type="inherit_record"
field_order="infix" count_ignore="yes" child_delimiter="default"
trigger_field="EB_SubscriberEligibilityOrBenefitInformation_TS271A1_2110C/EB01__EligibilityOrBenefitInformation"
trigger_value="1 2 3 4 5 6 7 8 A B C D E F G H I J K L M N O P Q R S T U V W X Y MC CB"
notes="Subscriber Eligibility or Benefit Information" />
</xs:appinfo>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="1" maxOccurs="1" ref="EB_SubscriberEligibilityOrBenefitInformation_TS271A1_2110C" />
<xs:element minOccurs="0" maxOccurs="9" ref="HSD_HealthCareServicesDelivery_TS271A1_2110C" />
<xs:element minOccurs="0" maxOccurs="9" ref="REF_SubscriberAdditionalIdentification_TS271A1_2110C" />
<xs:element minOccurs="0" maxOccurs="20" ref="DTP_SubscriberEligibilityBenefitDate_TS271A1_2110C" />
<xs:element minOccurs="0" maxOccurs="9" ref="AAA_SubscriberRequestValidation_TS271A1_2110C" />
<xs:element minOccurs="0" maxOccurs="10" ref="MSG_MessageText_TS271A1_2110C" />
<xs:element minOccurs="0" maxOccurs="10" ref="TS271A1_2115C_Loop" />
<xs:element minOccurs="0" name="LSLoop_2110C">
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="1" maxOccurs="1" ref="LS_Header_TS271A1_2110C" />
<xs:element minOccurs="0" maxOccurs="1" ref="TS271A1_2120C_Loop" />
<xs:element minOccurs="1" maxOccurs="1" ref="LE_Trailer_TS271A1_2110C" />
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:sequence>
</xs:complexType>
其中“ls_header_ts271A1_2110c”到“le_trailer_ts271A_2110c”无法反序列化
这三个片段是:
<xs:element name="LS_Header_TS271A1_2110C">
<xs:annotation>
<xs:appinfo>
<b:recordInfo tag_name="LS_Header_TS271A1_2110C" structure="delimited"
delimiter_type="inherit_field" field_order="prefix" count_ignore="no"
child_delimiter="default" notes="Loop Header" />
</xs:appinfo>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="LS01__LoopIdentifierCode">
<xs:annotation>
<xs:appinfo>
<b:fieldInfo edi_datatype="AN" justification="left">
</b:fieldInfo>
</xs:appinfo>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="X12_AN">
<xs:minLength value="1" />
<xs:maxLength value="6" />
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
<xs:element name="TS271A1_2120C_Loop">
<xs:annotation>
<xs:appinfo>
<b:recordInfo structure="delimited" delimiter_type="inherit_record" field_order="infix"
count_ignore="yes" child_delimiter="default"
trigger_field="NM1_SubscriberBenefitRelatedEntityName_TS271A1_2120C/NM101__EntityIdentifierCode" trigger_value="13 1P 2B 36 73 FA GP IL LR P3 P4 P5 PR SEP TTP VN X3 PRP"
notes="Subscriber Benefit Related Entity Name" />
</xs:appinfo>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element minOccurs="1" maxOccurs="1" ref="NM1_SubscriberBenefitRelatedEntityName_TS271A1_2120C" />
<xs:element minOccurs="0" maxOccurs="1" ref="N3_SubscriberBenefitRelatedEntityAddress_TS271A1_2120C" />
<xs:element minOccurs="0" maxOccurs="1" ref="N4_SubscriberBenefitRelatedCityStateZIPCode_TS271A1_2120C" />
<xs:element minOccurs="0" maxOccurs="3" ref="PER_SubscriberBenefitRelatedEntityContactInformation_TS271A1_2120C" />
<xs:element minOccurs="0" maxOccurs="1" ref="PRV_SubscriberBenefitRelatedProviderInformation_TS271A1_2120C" />
</xs:sequence>
</xs:complexType>
<xs:element name="LE_Trailer_TS271A1_2110C">
<xs:annotation>
<xs:appinfo>
<b:recordInfo tag_name="LE_Trailer_TS271A1_2110C" structure="delimited"
delimiter_type="inherit_field" field_order="prefix" count_ignore="no"
child_delimiter="default" notes="Loop Trailer" />
</xs:appinfo>
</xs:annotation>
<xs:complexType>
<xs:sequence>
<xs:element name="LE01__LoopIdentifierCode">
<xs:annotation>
<xs:appinfo>
<b:fieldInfo edi_datatype="AN" justification="left">
</b:fieldInfo>
</xs:appinfo>
</xs:annotation>
<xs:simpleType>
<xs:restriction base="X12_AN">
<xs:minLength value="1" />
<xs:maxLength value="6" />
</xs:restriction>
</xs:simpleType>
</xs:element>
</xs:sequence>
</xs:complexType>
为最后一个正确循环生成的类是:
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")]
[system.serializableAttribute()]
[system.diagnostics.debuggerStepThroughAttribute()]
[系统.componentModel.designerCategoryAttribute(“代码”)]
[system.xml.serialization.xmltypattribute(anonymousType=true,namespace=“http://schemas.microsoft.com/biztalk/edi/x12/2006”)]
[system.xml.serialization.xmlrootattribute(namespace=“http://schemas.microsoft.com/biztalk/edi/x12/2006”,isNullable=false)]
公共部分类TS271A1 U 2110C U循环{
private EB_SubscriberEligibilityOrBenefitInformation_TS271A1_2110C eB_SubscriberEligibilityOrBenefitInformation_TS271A1_2110CField;
private HSD_HealthCareServicesDelivery_TS271A1_2110C[] hSD_HealthCareServicesDelivery_TS271A1_2110CField;
private REF_SubscriberAdditionalIdentification_TS271A1_2110C[] rEF_SubscriberAdditionalIdentification_TS271A1_2110CField;
private DTP_SubscriberEligibilityBenefitDate_TS271A1_2110C[] dTP_SubscriberEligibilityBenefitDate_TS271A1_2110CField;
private AAA_SubscriberRequestValidation_TS271A1_2110C[] aAA_SubscriberRequestValidation_TS271A1_2110CField;
private MSG_MessageText_TS271A1_2110C[] mSG_MessageText_TS271A1_2110CField;
private TS271A1_2115C_Loop[] tS271A1_2115C_LoopField;
private TS271A1_2110C_LoopLSLoop lSLoopField;
/// <remarks/>
public EB_SubscriberEligibilityOrBenefitInformation_TS271A1_2110C EB_SubscriberEligibilityOrBenefitInformation_TS271A1_2110C {
get {
return this.eB_SubscriberEligibilityOrBenefitInformation_TS271A1_2110CField;
}
set {
this.eB_SubscriberEligibilityOrBenefitInformation_TS271A1_2110CField = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("HSD_HealthCareServicesDelivery_TS271A1_2110C")]
public HSD_HealthCareServicesDelivery_TS271A1_2110C[] HSD_HealthCareServicesDelivery_TS271A1_2110C {
get {
return this.hSD_HealthCareServicesDelivery_TS271A1_2110CField;
}
set {
this.hSD_HealthCareServicesDelivery_TS271A1_2110CField = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("REF_SubscriberAdditionalIdentification_TS271A1_2110C")]
public REF_SubscriberAdditionalIdentification_TS271A1_2110C[] REF_SubscriberAdditionalIdentification_TS271A1_2110C {
get {
return this.rEF_SubscriberAdditionalIdentification_TS271A1_2110CField;
}
set {
this.rEF_SubscriberAdditionalIdentification_TS271A1_2110CField = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("DTP_SubscriberEligibilityBenefitDate_TS271A1_2110C")]
public DTP_SubscriberEligibilityBenefitDate_TS271A1_2110C[] DTP_SubscriberEligibilityBenefitDate_TS271A1_2110C {
get {
return this.dTP_SubscriberEligibilityBenefitDate_TS271A1_2110CField;
}
set {
this.dTP_SubscriberEligibilityBenefitDate_TS271A1_2110CField = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("AAA_SubscriberRequestValidation_TS271A1_2110C")]
public AAA_SubscriberRequestValidation_TS271A1_2110C[] AAA_SubscriberRequestValidation_TS271A1_2110C {
get {
return this.aAA_SubscriberRequestValidation_TS271A1_2110CField;
}
set {
this.aAA_SubscriberRequestValidation_TS271A1_2110CField = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("MSG_MessageText_TS271A1_2110C")]
public MSG_MessageText_TS271A1_2110C[] MSG_MessageText_TS271A1_2110C {
get {
return this.mSG_MessageText_TS271A1_2110CField;
}
set {
this.mSG_MessageText_TS271A1_2110CField = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("TS271A1_2115C_Loop")]
public TS271A1_2115C_Loop[] TS271A1_2115C_Loop {
get {
return this.tS271A1_2115C_LoopField;
}
set {
this.tS271A1_2115C_LoopField = value;
}
}
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified)]
public TS271A1_2110C_LoopLSLoop LSLoop {
get {
return this.lSLoopField;
}
set {
this.lSLoopField = value;
}
}
}
对于熟悉该标准的人来说,这是一个HIPAA271,我无法反序列化2120C循环。对你们其他人来说,我不认为这和具体的问题有关系…
我已经验证了我需要的节点既存在于XSD中,也存在于我正在解析的实际XML文件中。关于下一步去哪里有什么建议吗?