В экземпляре объекта не задана ссылка на объект. Ошибка LINQ to XML - PullRequest
2 голосов
/ 22 сентября 2010

Я пытаюсь извлечь данные из XML. Я сгенерировал классы C #, используя XSD этого XML-файла. Я пытаюсь получить данные из файла XML и сохранить его в классе C #. Я столкнулся с тем, что NULLReferenceException был отменен пользователем; "В экземпляре объекта не задана ссылка на объект." ошибка.

Мой XML-файл

<clue_personal_auto xmlns = "http://cp.com/rules/client"> 
<admin> 
<quoteback name="trackingNUmber">67890 </quoteback>
</admin> 
<report> 
    <inquiry_processing_summary>
    <classification> inqiury </classification>
    </inquiry_processing_summary>
    <results_dataset>
      <claims_history type="Subject Section">
      <claim id = "s1" unit-number="1" sequence-number="1" number="11111">
      <scope_of_claim>Full Scope</scope_of_claim>
      <claim_date>05/19/2005</claim_date>
      <claim_age years="1" months="10"/>
      <clue_file_number>222221</clue_file_number>
      <policy number="XX111111">
          <issuer> CUSTOMER TEST </issuer>
          <auto_type> Personal Auto</auto_type>
          <fsi_issuer>Field absent on inquiry</fsi_issuer>
       </policy>
       <subject classification="POlicy HOlder">
         <name>
         <first>SADIE</first>
         <last>DOE</last>
         <fsi_first>Discrepancy</fsi_first>
         <fsi_middle>Field absent on inquiry and rport</fsi_middle>
         <fsi_last>Match</fsi_last>
         <fsi_suffix>Field absent on inquiry and report</fsi_suffix>
        </name>
        <ssn>123456789</ssn>
        <driversLicense number="999999999" state="GA">
        <fsi_state>Field abscent on inquiry</fsi_state>
        <fsi_number>Field absent on inquiry</fsi_number>
        </driversLicense>
        </subject>
        <claimPayment amount_paid="2841.00" type="Collision" disposition="Open"/>
        <claimPayment amount_paid="0.00" type="Physical/Property Damage" disposition="Open"/>
        <claim_association_indicator>Indicates the Vehicle Operator was the person matched </claim_association_indicator>
        <vehicle>
         <model_year>1995</model_year>
         <model_make>Nissan Sentra</model_make>
         <vin> 9N9ABC99D434kjlkfajsdkl</vin>
         <disposition>Not Reported </disposition>
         <fsi_model_year>Field absent on inquiry and report</fsi_model_year>
         <fsi_model_make>Field absent on inquiry and report</fsi_model_make>
         <fsi_vin>Field absenton inquiry and report</fsi_vin>
         </vehicle>
        </claim>
      <claim id = "s2" unit-number="2" sequence-number="2" number="22222">
        <scope_of_claim>Limited scope</scope_of_claim>
      </claim>
      <claim id = "s3" unit-number="3" sequence-number="3" number="33333">
      </claim>
      </claims_history>
      <inquiry_history name ="GO America" id="1" date="09/10/2010"/>
     </results_dataset>
</report> 

Мой запрос:

  List<results_dataset> resultdatasets =
    (from b in query.Descendants(xmlns + "results_dataset")
      select new results_dataset
          {
           claimsHistory = 
                     (from c in query.Descendants(xmlns + "claims_history")
                      select new Claims_history
                         {
                           claim = (from d in query.Descendants(xmlns + "claim")
                              select new Claim () 
                               {
                               policy = ( from e in query.Descendants(xmlns + "policy")
                                          **select new cluePolicyType()
                                            {
                                             issuer = e.Element("issuer").Value ,
                                             number = e.Attribute("number").Value ,
                                             auto_type = e.Element("auto_type").Value,
                                             fsi_issuer= e.Element("fsi_issuer").Value,
                                           } **
                                        ).ToList(),
                             scope_of_claim = d.Element("scope_of_claim").Value,
                             type = c.Attribute("type").Value

                           }).ToList()
                 }
         ).ToList();

Область между ********, где я получаю эту ошибку. Если я удаляю код, который находится внутри {} области ********, то ошибки нет. Я не в состоянии понять это. это сводит меня с ума.

1 Ответ

2 голосов
/ 22 сентября 2010

Итак, вы сократили проблему до следующих строк:

issuer = e.Element("issuer").Value ,
number = e.Attribute("number").Value ,
auto_type = e.Element("auto_type").Value,
fsi_issuer= e.Element("fsi_issuer").Value

Не имея возможности протестировать ваш код, я предполагаю, что Элемент или Атрибут (эмитент / число / auto_type / fsi_issuer) просто не существует для некоторых ваших элементов. Если указанный атрибут не найден, он вернет значение NULL, что приведет к сбросу вашего NRE при разрешении .Value.

...