2009-11-30 63 views
0

我調用了一個「web服務」,它使xml響應成爲一個無效節點,所以當我嘗試反序列化它時,它會引發異常。反序列化具有無效值的xml流

我使用XmlSerializer類,像這樣:

internal class Response<T> 
{ 
    public Response(byte[] xml) 
    { 
     XmlSerializer s = new XmlSerializer(typeof(T)); 
     XmlReader reader = XmlReader.Create(new MemoryStream(xml)); 

     if (s.CanDeserialize(reader)) 
      this.ActualResponse = (T)s.Deserialize(reader); 
    } 

    public T ActualResponse { get; private set; } 
} 

和節點我遇到類似這樣的麻煩:

<autorizacion>FALSE</autorizacion> 

我得到的例外是

System.InvalidOperationException: XML文檔中存在錯誤(7, 3 5)。 ---> System.FormatException:該字符串 '假' 不是一個有效的布爾值 ..

這是顯而易見的。

問題是,如何反序列化它而不必遍歷所有節點,手動構建我的響應實體?有沒有辦法?

我沒有控制服務器

回答

1

最快的方法似乎是將setAutorizacion(boolean)的參數更改爲setAutorizacion(String),然後轉換爲bool在二傳手中。另外,記錄你做了什麼以及爲什麼你在制定者和更高層次的文檔中都做了這些。

0

你有沒有它來驗證您的模式對其進行格式化。格式化錯誤的值並使用模式重新驗證它。

+0

你能給我多一點細節嗎? – juan 2009-11-30 15:52:35

1

你可以使用XSL反序列化之前重新格式化你的XML

編輯

的XSL轉換與C#:http://www.csharpfriends.com/Articles/getArticle.aspx?articleID=63

您的XSL應該包含這樣的事情

<xsl:template match="autorizacion"> 
    <autorizacion><xsl:value-of select="concat(upper-case(substring(current(),1,1)),   substring(current(),2))" /> 
</autorizacion> 
</xsl:template> 
+0

你能提供一個例子嗎? – juan 2009-11-30 15:59:21