我正在调用一个“Web服务”,它将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, 35)。 ---&GT; System.FormatException:The 字符串'FALSE'不是有效的布尔值 值..
这是显而易见的。
问题是,如何在不必迭代所有节点的情况下反序列化它,手动构建我的响应实体?有办法吗?
我无法控制服务器
答案 0 :(得分:1)
您可以在反序列化之前使用Xsl重新格式化xml
修改
使用c#进行xsl变换: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>
答案 1 :(得分:1)
最快的方法似乎是将setAutorizacion(boolean)的参数更改为setAutorizacion(String),然后在setter中转换为boolean。此外,记录您所做的以及为什么在该setter和更高级别的文档中都这样做。
答案 2 :(得分:0)
您必须对其进行格式化,而不对其架构进行验证。格式化错误的值并使用模式重新验证它。