Десериализация ошибок выдачи 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
,