C # Назначить значения в конверт SOAP, используя словарь? - PullRequest
0 голосов
/ 12 мая 2018

Я чувствую, что это, вероятно, довольно простой вопрос, но я новичок в SOAP, связанных с ним пространствах имен и т. Д.

У меня есть SOAP-запрос, который выглядит примерно так (полный запрос сокращен для краткости):

<soapenv:Body>
  <ns:addLine sequence="?">
     <line>
        <pattern></pattern>
        <description></description>
        <usage></usage>
        <routePartitionName uuid="?"></routePartitionName>
        <callForwardAll>
              <forwardToVoiceMail></forwardToVoiceMail>
           <callingSearchSpaceName uuid="?"></callingSearchSpaceName>
           <secondaryCallingSearchSpaceName uuid="?"></secondaryCallingSearchSpaceName>
              <destination></destination>
        </callForwardAll>
        <callForwardBusy>
              <forwardToVoiceMail></forwardToVoiceMail>
           <callingSearchSpaceName uuid="?"></callingSearchSpaceName>
              <destination></destination>
        </callForwardBusy>
        <callForwardBusyInt>
              <forwardToVoiceMail></forwardToVoiceMail>
           <callingSearchSpaceName uuid="?"></callingSearchSpaceName>
              <destination></destination>
        </callForwardBusyInt>

Значения для этих элементов будут извлечены из комбинации app.config и того, что пользователь вводит в форму, и я подумал, что словарь будет самым простым способом присвоения значений элементам.

Так вот мой вопрос; как назначить значения элементам "forwardToVoiceMail" и "secondCallingSearchSpaceName", если каждый из них может иметь разные значения? Я имею в виду, что словарь имеет только два измерения, ключ и значение, поэтому в словаре не может быть callForwardAll\forwardToVoiceMail, true и callForwardBusy\forwardToVoiceMail, false.

Любая помощь / предложения будут оценены!

1 Ответ

0 голосов
/ 12 мая 2018

XML, похожий на иерархическую структуру данных, мне кажется неудобным связывать его со словарем, как вы его упоминаете. Другой способ заключается в том, что вы создаете классы, которые напоминают ваш XML-макет. Итак, создайте:

` public class ClassForward
     bool ForwardToVoiceMail;
     GUID callingSearchSpaceName;
     GUID secondaryCallingSearchSpaceName;
     string Destination;
  end;

  public class Line
    string pattern;
    string description;
    ClassForward callForwardAll;
    ClassForward callForwardBusy;
    ClassForward callForwardBusyInt;
    ...
 `

Затем сохраните и прочитайте, используя XmlTextWriter и XmlTextReader в памяти, используя что-то вроде:

StringBuilder builder = new StringBuilder();
XmlWriter writer = XmlWriter.Create(builder, new XmlWriterSettings()));
SaveLines(ref writer, Lines);

Где:

public void SaveLines(ref XmlTextWriter writer, List<Line> myLines)
{
    foreach(Line line in MyLines)
    {
       writer.WriteStartElement("line");
       writer.Add(new XElement("pattern", line.pattern));
       writer.Add(new XElement("description", line.description));
       writert.Add(new XElement("CallForwardAll", 
                   new XElement("forwardToVoiceMail", line.forwardToVoiceMail));

... } * +1010 *

Вы поняли.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...