2009-11-30 32 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