我将一些XML发布到AWS中的API网关方法,它与SNS集成。然后向主题订阅一个SQS队列;我有一个C进程,它间歇地轮询队列,需要反序列化XML。
问题是,XML标记之间的空白最终会在某处被编码,所以制表符变成
\t
新的生产线
\r\n
. 但这些最终都是
物理标记
在绳子里面。
发布到API网关的示例XML:
<?xml version="1.0" encoding="utf-8"?>
<ProfileInformation>
<Username>bgs264</Username>
</ProfileInformation>
<?xml version=\"1.0\" encoding=\"utf-8\"?>\n<ProfileInformation>\n\t<Username>bgs264</Username>\n</ProfileInformation>
注意,声明中的属性以
\"
最后贴出来的空白是
\t
,
\r\n
然而,这些并不是“在调试器中出现的字符串,但实际上是一个制表符”
实际上是这样的
在绳子里。
所以当我试图反序列化时,使用
using (var reader = new StringReader(message))
var myObj = serializer.Deserialize(reader) as ProfileInformation);
InvalidOperationException:XML文档(1,15)中存在错误。
它指的是第一个
\
声明中的字符,如
version=\"1.0\"
我当时的想法是
string.Replace
\t
用户的用户名字符串可能是有效的,但实际上是空的
bgs\t264
这里的替换会导致不一致。我想我会举个例子
bgs\\t264
所以一个替代者会让我错误地
bgs\264
例如。
所以我需要修理这些
\n\t
值得一提的是,我还有一个用Go编写的lambda,它没有任何问题,只是将完全相同的字符串直接反序列化为XML。所以这是可能的。
我最初的想法是:
-
我能在传递字符串之前先解码它吗
反序列化?我试过了
HttpUtility.DecodeHtml
但我
别以为我要解码的其实是HTML!
-
有没有一个不同的XML库可以使用呢?