C# 如何将列表转换为复杂参数数组
我有我自己的服务参考,我正在呼叫一个命名列表。此列表将命名错误的属性转换为有用的属性。我如何才能以一种它能理解的方式将此列表传递回去 我正在从客户机取回数据,但我不知道如何初始化数据,以便以客户机期望的方式将其发送到另一个web服务 由.NET生成的命名参数:C# 如何将列表转换为复杂参数数组,c#,arrays,web-services,multidimensional-array,C#,Arrays,Web Services,Multidimensional Array,我有我自己的服务参考,我正在呼叫一个命名列表。此列表将命名错误的属性转换为有用的属性。我如何才能以一种它能理解的方式将此列表传递回去 我正在从客户机取回数据,但我不知道如何初始化数据,以便以客户机期望的方式将其发送到另一个web服务 由.NET生成的命名参数: /// <remarks/> [System.Xml.Serialization.XmlElementAttribute("p2PARM", Order=4)] public P2PARM[] p2PARM {
/// <remarks/>
[System.Xml.Serialization.XmlElementAttribute("p2PARM", Order=4)]
public P2PARM[] p2PARM {
get {
return this.p2PARMField;
}
set {
this.p2PARMField = value;
this.RaisePropertyChanged("p2PARM");
}
}
//
[System.Xml.Serialization.xmlementAttribute(“p2PARM”,顺序=4)]
公共P2PARM[]公共P2PARM{
得到{
返回此.p2PARMField;
}
设置{
this.p2PARMField=值;
本次募捐财产变更(“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");
}
}
//
[System.CodeDom.Compiler.GeneratedCodeAttribute(“System.Xml”,“4.0.30319.34230”)]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute(“代码”)]
[System.Xml.Serialization.XmlTypeAttribute(命名空间=”http://update_data/xsd")]
公共部分类P2PARM:对象,System.ComponentModel.INotifyPropertyChanged{
私有字符串p2A0STField;
专用字符串p2A5TXField;
私有十进制p2G9NCField;
///
[System.Xml.Serialization.XmlElementAttribute(顺序=0)]
公共字符串p2A0ST{
得到{
返回此.p2A0STField;
}
设置{
此值为0.p2A0STField=值;
本.RaisePropertyChanged(“p2A0ST”);
}
}
///
[System.Xml.Serialization.XmlElementAttribute(顺序=1)]
公共字符串p2A5TX{
得到{
返回此.p2A5TXField;
}
设置{
此值为0.p2A5TXField=值;
本.RaiseProperty变更(“p2A5TX”);
}
}
///
[System.Xml.Serialization.XmlElementAttribute(顺序=2)]
公共十进制p2G9NC{
得到{
返回此.p2g9nc字段;
}
设置{
此值为0.P2G9NC字段=值;
本.RaisePropertyChanged(“p2G9NC”);
}
}
我可以成功地将数据下拉到数据列表中:
List<Models.UpdateData.InputData.Data> dataList = input.DataList;
SVC_UpdateData.P2PARM[] p2Input = new SVC_UpdateData.P2PARM[dataList.Count];
List dataList=input.dataList;
SVC_UpdateData.P2PARM[]p2Input=new SVC_UpdateData.P2PARM[dataList.Count];
这就是我试图设置变量的地方,但p2Input为null,我无法确定下一步要去哪里
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;
}
for(int i=0;i
以下是我要发送到的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; }
}
[DataContract]
公共类输入数据
{
[数据合同]
公共类数据
{
[数据成员]
公共字符串NamedField1{get;set;}
[数据成员]
公共字符串namedFeld2{get;set;}
[数据成员]
公共十进制名称字段3{get;set;}
}
[数据成员]
公共列表数据列表{get;set;}
}
p2Input
不为空,它是一个数组,您对其进行了初始化。但您还需要实例化数组中的每个元素:
for (int i=0; i < dataList.Count; i++)
{
p2Input[i] = new SVC_UpdateData.P2PARM();
p2Input[i].p2A0ST = dataList[i].NamedField1;
// ...
}
for(int i=0;i
我会将此标记为答案,因为您确实正确回答了问题。但是,我想得太多了。我将代码更改为一个列表,并像平常一样填充它,然后当我设置它时,我将其设置为p2Input.ToArray()它工作得很好。谢谢你的帮助。当然,你也可以这样做。我认为阵列理论上更有效,但在这种情况下可能并不重要。