如何将列表转换为复杂参数数组

时间:2015-03-30 20:45:20

标签: c# arrays web-services multidimensional-array

我有自己的服务引用,我使用命名列表<>进行调用。此列表将极其命名的属性转换为有用的属性。我怎样才能以理解它的方式传回这个列表?

我从客户端获取数据,但我不知道如何初始化它以便以预期的方式发送到其他Web服务。

由.NET生成的非常命名的参数:

/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("p2PARM", Order=4)]
    public P2PARM[] p2PARM {
        get {
            return this.p2PARMField;
        }
        set {
            this.p2PARMField = value;
            this.RaisePropertyChanged("p2PARM");
        }
    }

由.NET生成的属性:

/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "4.0.30319.34230")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace="http://update_data/xsd")]
public partial class P2PARM : object, System.ComponentModel.INotifyPropertyChanged {

    private string p2A0STField;

    private string p2A5TXField;

    private decimal p2G9NCField;

    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute(Order=0)]
    public string p2A0ST {
        get {
            return this.p2A0STField;
        }
        set {
            this.p2A0STField = value;
            this.RaisePropertyChanged("p2A0ST");
        }
    }

    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute(Order=1)]
    public string p2A5TX {
        get {
            return this.p2A5TXField;
        }
        set {
            this.p2A5TXField = value;
            this.RaisePropertyChanged("p2A5TX");
        }
    }

    /// <remarks/>
    [System.Xml.Serialization.XmlElementAttribute(Order=2)]
    public decimal p2G9NC {
        get {
            return this.p2G9NCField;
        }
        set {
            this.p2G9NCField = value;
            this.RaisePropertyChanged("p2G9NC");
        }
    }

我可以成功将数据下拉到dataList:

List<Models.UpdateData.InputData.Data> dataList = input.DataList;
SVC_UpdateData.P2PARM[] p2Input = new SVC_UpdateData.P2PARM[dataList.Count];

这是我试图设置变量的地方,但p2Input为空,我无法确定下一步该去哪里..

for (int i=0; i < dataList.Count; i++)
{

    p2Input[i].p2A0ST = dataList[i].NamedField1;
    p2Input[i].p2A5TX = dataList[i].NamedField2;
    p2Input[i].p2G9NC = dataList[i].NamedField3;
}

以下是我发送给的WSDL的XML:

  <xs:complexType name="P2PARM">
    <xs:sequence>
      <xs:element name="p2A0ST" type="xs:string" />
      <xs:element name="p2A5TX" type="xs:string" />
      <xs:element name="p2G9NC" type="xs:decimal" />
    </xs:sequence>
  </xs:complexType>

这是我的模型,其中包含我的列表:

    [DataContract]
    public class InputData
    {
        [DataContract]
        public class Data
        {
            [DataMember]
            public string NamedField1 { get; set; }
            [DataMember]
            public string NamedField2 { get; set; }
            [DataMember]
            public decimal NamedField3 { get; set; }
        }
        [DataMember]
        public List<Data> DataList { get; set; }
    }

1 个答案:

答案 0 :(得分:2)

p2Input不为空,它是一个数组并且您已初始化它。但是您还需要实例化数组中的每个元素:

for (int i=0; i < dataList.Count; i++)
{
    p2Input[i] = new SVC_UpdateData.P2PARM();
    p2Input[i].p2A0ST = dataList[i].NamedField1;
    // ...
}