Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#使用字典为SOAP信封赋值?_C#_Soap - Fatal编程技术网

C#使用字典为SOAP信封赋值?

C#使用字典为SOAP信封赋值?,c#,soap,C#,Soap,我觉得这可能是一个非常基本的问题,但我不熟悉SOAP及其相关的名称空间等,所以这里是: 我有一个SOAP请求,看起来像(为了简洁起见,对完整请求进行了删节): 这些元素的值将从app.config和用户在表单上输入的内容的组合中提取,我认为字典将是将值分配给元素的最直接的方法 这是我的问题;当“forwardToVoiceMail”和“secondaryCallingSearchSpaceName”元素可能有不同的值时,如何为它们赋值?我的意思是,字典只有两个维度,键和值,所以字典中不能有c

我觉得这可能是一个非常基本的问题,但我不熟悉SOAP及其相关的名称空间等,所以这里是:

我有一个SOAP请求,看起来像(为了简洁起见,对完整请求进行了删节):


这些元素的值将从app.config和用户在表单上输入的内容的组合中提取,我认为字典将是将值分配给元素的最直接的方法

这是我的问题;当“forwardToVoiceMail”和“secondaryCallingSearchSpaceName”元素可能有不同的值时,如何为它们赋值?我的意思是,字典只有两个维度,键和值,所以字典中不能有
callForwardAll\forwardToVoiceMail,true
callForwardBusy\forwardToVoiceMail,false


如有任何帮助/建议,将不胜感激

像您提到的那样,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));
public void存储行(ref XmlTextWriter writer,List myline)
{
foreach(myline中的行)
{
writer.writeStarteElement(“行”);
writer.Add(新的XElement(“pattern”,line.pattern));
writer.Add(新的XElement(“description”,line.description));
添加(新的XElement(“CallForwardAll”),
新的XElement(“forwardToVoiceMail”,line.forwardToVoiceMail));
。。。 }


你明白了。

或者你可以用适当的属性修饰类,只使用XmlSerializer而不是你正在做的自定义xml生成。
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));