У меня проблемы со строками, содержащими амперсанды в моем клиенте, сгенерированными из dotnet-svcutil.
Когда я получаю ответ через клиента, все амперсанды сериализуются как
<Users xsi:type=\"xsd:string\">John & Jane</Users>
Когдая извлекаю значение из запроса в моем коде, он был десериализован как амперсанд
UserResponse users = await GetUsersAsync()
users.Names = "John & Jane"
На более позднем этапе мне нужно отправить значение пользователей обратно, как это
await SetUsersAsync(users.Names);
Когда я перехватываю сгенерированный запрос мыла, я вижу, что амперсанд не экранирован
public class MyMessageInspector : IClientMessageInspector
{
public void AfterReceiveReply(ref Message reply, object correlationState)
{
var xml = reply.ToString(); // This shows <Users xsi:type=\"xsd:string\">John & Jane</Users>
}
public object BeforeSendRequest(ref Message request, IClientChannel channel)
{
var xml = request.ToString(); // This shows <Users xsi:type=\"xsd:string\">John & Jane</Users>
return null;
}
}
Это вызывает сбой всего запроса в подключенной службе.Из информации, которую я нашел в сети, амперсанд должен быть преобразован в &
с помощью сериализатора.Я мог бы преобразовать значение самостоятельно, но так как я только возвращаю значение, полученное от мыльного клиента, мне пришлось бы проверять и преобразовывать каждую возвращаемую строку.
Есть ли у вас какие-либо предложения поКак я могу настроить сгенерированный клиент для автоматического экранирования амперсандов?