2013-10-28 67 views
0

我試圖反序列化OFX XML文檔轉換成它的對象(我轉換XSD對班)Deserialising XML文檔投擲錯誤 - 如何找出它失敗

這裏是下面的代碼。

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

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

它未能對XML的XmlSerializer的newing了錯誤

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

的錯誤:

Unable to generate a temporary class (result=1). error CS0030: Cannot convert type 'System.DateTime' to 'string' error CS0030: Cannot convert type 'System.DateTime' to 'string' error CS0030: Cannot convert type 'System.DateTime' to 'string'

我需要知道的是如何在反序列化時發現失敗的代碼中的確切位置?沒有內部異常等

+0

你的OFXRequest類是什麼樣的? – galenus

+0

這個錯誤是在元數據/元編程階段 - 而不是「讀取xml」階段 - 因此這裏有趣的事情不是xml,而是:c#。 「OFXRequest」是什麼樣的? –

+0

它的長度約50000行 - 在這裏粘貼有點困難。我可以將文件上傳到某個服務器? – daveBM

回答

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

+0

Ive changed [XmlElement(Type = typeof (字符串),ElementName =「TAXYEAR」,IsNullable = false,DataType =「gYear」)]和[XmlElement(Type = typeof(DateTime),ElementName =「TAXYEAR」,IsNullable = false,DataType =「gYear」)]和我現在收到一個稍微好一點的錯誤..'gYear'是XmlElementAttribute.DataType屬性的無效值。 gYear無法轉換爲System.DateTime。 – daveBM

+0

使用字符串類型對生成的類進行了黑客入侵,以將字符串和日期時間類型的Gyear進行替換。現在它精美地反序列化了。感謝Marc Gravell爲您提供洞察力。 – daveBM