Десериализация ошибок выдачи XML-документов - как выяснить, где происходит сбой

Я пытаюсь десериализовать документ OFX xml в его объект (я преобразовал XSD в классы)

Вот код ниже.

  XmlSerializer xmlSerializer = new XmlSerializer(typeof(OFX));

        using (var reader = xmlDoc.Root.CreateReader())
        {
            return (OFXRequest)xmlSerializer.Deserialize(reader);
        }

Сбой при обновлении xml XmlSerializer с ошибкой

Документ XML:

<?OFX OFXHEADER=200  VERSION=211  SECURITY="NONE"  OLDFILEUID="NONE"  NEWFILEUID="NONE"  ?>
<OFX>
  <SIGNONMSGSRQV1>
    <SONRQ>
      <DTCLIENT>20120202</DTCLIENT>
      <USERID>USER-ID</USERID>
      <USERPASS>PASSWORD</USERPASS>
      <LANGUAGE>ENG</LANGUAGE>
      <FI>
        <ORG>Organisation</ORG>
        <FID>OrganisationID</FID>
      </FI>
      <APPID>YOD</APPID>
      <APPVER>1</APPVER>
    </SONRQ>
  </SIGNONMSGSRQV1>
  <SIGNUPMSGSRQV1>
    <ACCTINFOTRNRQ>
      <TRNUID>456579841231</TRNUID>
      <ACCTINFORQ>
        <DTACCTUP>2013101209000.000[2:GMT]</DTACCTUP>
      </ACCTINFORQ>
    </ACCTINFOTRNRQ>
  </SIGNUPMSGSRQV1>
</OFX>

Ошибка:

Невозможно создать временный класс (результат =1). ошибка CS0030: невозможно преобразовать тип "System.DateTime" в "строку" ошибка CS0030: невозможно преобразовать тип "System.DateTime" в "строку" ошибка CS0030: невозможно преобразовать тип "System.DateTime" в "строку"

Что мне нужно знать, так это как найти точное место в коде, которое не работает во время десериализации? Нет внутренних исключений и т. Д.

1 ответ

Решение

По-видимому, это путает то, что вы хотите сделать с такими вещами

[XmlElement(Type=typeof(string),ElementName="TAXYEAR",IsNullable=false,DataType="gYear")]
[EditorBrowsable(EditorBrowsableState.Advanced)]
public TAXYEARCollection __TAXYEARCollection;

который ясно говорит "трактовать значения как строку", стихи это:

[Serializable]
[EditorBrowsable(EditorBrowsableState.Advanced)]
public class TAXYEARCollection : ArrayList
{
    public DateTime Add(DateTime obj)
    {
        base.Add(obj);
        return obj;
    }

    public DateTime Add()
    {
        return Add(new DateTime());
    }

    public void Insert(int index, DateTime obj)
    {
        base.Insert(index, obj);
    }

    public void Remove(DateTime obj)
    {
        base.Remove(obj);
    }

    new public DateTime this[int index]
    {
        get { return (DateTime) base[index]; }
        set { base[index] = value; }
    }
}

который явно хочет, чтобы ценности были DateTime,

Другие вопросы по тегам