Кодирование элемента типа char в SOAP XML - PullRequest
2 голосов
/ 10 июня 2011

У меня возникли проблемы с кодированием char (unitType).Ниже приведен пример запроса со страницы .NET wdsl.Мне нужно знать, в каком формате кодировать символ, потому что вставка его прямо в XML не работает.Требуется ли для .NET (3.5) SOAP какой-то определенный формат?

<?xml version="1.0" encoding="utf-8"?>
 <soap12:Envelope
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
 xmlns:xsd="http://www.w3.org/2001/XMLSchema"
 xmlns:soap12="http://www.w3.org/2003/05/soap-envelope">
   <soap12:Body>
     <DiagnosticAnalysis xmlns="http://www.somewhere.com/">
       <tuple>int</tuple>
       <unitID>int</unitID>
       <unitType>char</unitType>
       </DiagnosticAnalysis>   
   </soap12:Body> 
 </soap12:Envelope>

Передача чего-то вроде <unitType>L</unitType> не работает и выдает ошибку ниже:

ошибка в XML-документе (7, 37).---> Входная строка была в неправильном формате.

1 Ответ

1 голос
/ 10 июня 2011

char сериализуется как число (int) как XmlSerializer. Поскольку кажется, что вы пытаетесь создать XML с нуля, попробуйте установить для XML значение <unitType>76</unitType> (значение 76 для L).

Я тестировал, используя следующий код в LinqPad:

void Main()
{
    var m = new MyClass();
    m.UnitType = 'L';

    var serializer = new System.Xml.Serialization.XmlSerializer(typeof(MyClass));
    using(var sr = new StringWriter())
    {
        serializer.Serialize(sr, m);
        Console.WriteLine(sr.GetStringBuilder().ToString());
    }
}

public class MyClass
{
    public char UnitType { get; set; }
}

Вывод:

<?xml version="1.0" encoding="utf-16"?>
<MyClass xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
         xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <UnitType>76</UnitType>
</MyClass>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...