2015-03-30 68 views
0

我有我自己的服務參考,我打電話給一個名爲列表<>。此列表將轉換非常有用的屬性。我怎樣才能通過這個列表回來瞭解它?如何將列表轉換爲複雜的參數數組

我正在從客戶端獲取數據,但我不知道如何初始化它以便以期望的方式發送到其他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"); 
     } 
    } 

我可以成功地提取數據分解成數據列表:

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; } 
    } 

回答

2

p2Input不爲null,它是一個數組,並初始化它。但是您還需要實例化陣列中的每個元素:

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

我會將此標記爲答案,因爲您確實正確回答了問題。然而,我的方式超過了這個想法。我將我的代碼更改爲List ,然後像正常一樣填充它,然後當我設置它時,我將它設置爲p2Input.ToArray(),它的工作原理非常漂亮。感謝您的幫助。 – 2015-03-30 21:24:57

+0

當然,你也可以這樣做。我會爭辯說一個數組在理論上更高效,但在這種情況下可能並不重要。 – 2015-03-30 21:39:01