0

I have an XSD and a class generated by XSD.EXE I'm using to deserialize an XML document. For some reason, a node fairly deep into the XML document is failing to deserialize, and I can't find why it would be doing so...

Here's how I'm deserializing:

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;
}

The relevant part of the XSD looks something like:

<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>

Where 'LS_Header_TS271A1_2110C' thru 'LE_Trailer_TS271A_2110C' are failing to deserialize

Those three snippets are:

<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>

The Generated Class for the last correct loop is:

[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "2.0.50727.3038")]

[System.SerializableAttribute()] [System.Diagnostics.DebuggerStepThroughAttribute()] [System.ComponentModel.DesignerCategoryAttribute("code")] [System.Xml.Serialization.XmlTypeAttribute(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)] public partial class TS271A1_2110C_Loop {

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;
    }
}

}

For those familiar with the standard, this is specifically a HIPAA 271 and I'm failing to deserialize the 2120C loop. For the rest of you, I don't think that matters to the specific problem...

I've verified the node I need exists both in the XSD and the actual XML file I'm parsing. Any suggestions on where to look next?

AllenG
  • 7,946
  • 26
  • 38
  • When you say it's failing to deserialize, are you getting an exception of some sort, or is the object just NULL when deserialization is complete? Also, How was the source XML generated? – Toby Jun 14 '10 at 15:12
  • Could you paste the link (or) text to your xsd and the generated class for ChildNode4 (the last node correctly deserialised)? – Grzenio Jun 14 '10 at 15:13
  • @Toby: The object is null when the deserialization is complete. I used XSD.EXE @Grzenio: It's a long chunk of XSD, I'll try to add in the relevant snippets. – AllenG Jun 14 '10 at 16:01
  • Sorry, I don't mean how was the code generated. The XML document/message that you're attempting to deserialize, was it hand-written, generated by your code, or does it come from another system (internal or B2B)? – Toby Jun 14 '10 at 16:47
  • @Toby: Ah. It comes from a third party. I've already validated that it is correct, however. – AllenG Jun 14 '10 at 17:39

1 Answers1

1

I've run into this too. From what I can see, the XmlSerializer does not support namespaces on child nodes. You have to explicitly set their namespace to "" (using xmlns="" or suchlike).

Sean Hederman
  • 430
  • 2
  • 12