Я отправляю XML в метод API-шлюза в AWS, который интегрирован в SNS.Очередь SQS затем подписывается на тему;и у меня есть процесс C #, который периодически опрашивает очередь и должен десериализовать XML.
Проблема в том, что пробелы между тегами XML в конечном итоге кодируются вдоль линии, поэтому вкладки становятся \t
иновые строки становятся \r\n
.Но они заканчиваются физическими токенами внутри строки.
Пример XML, который отправляется в шлюз API:
<?xml version="1.0" encoding="utf-8"?>
<ProfileInformation>
<Username>bgs264</Username>
</ProfileInformation>
Строка, которая считывается из очереди SQS:
<?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
символы там, где онивстречаются между тегами XML.
Для чего бы то ни было, у меня также есть лямбда, написанная на Go, которая не имеет проблем с этим и просто десериализует точно такую же строку прямо в XML.Так что это должно быть возможно.
Мои первоначальные мысли:
- Можно ли как-то декодировать строку перед передачей для десериализации?Я попробовал это с
HttpUtility.DecodeHtml
, но я не думаю, что это на самом деле HTML, который я пытаюсь декодировать! - Можно ли использовать другую библиотеку XML, которая бы работала?