在数据契约中存储数组

时间:2014-03-14 06:38:07

标签: c# arrays

我的数据合同定义如下:

[DataContract]
public class DemoSearchList : ReturnValuesBase
{
    [DataMember]
    public string SessionId { get; set; } 

    [DataMember]
    public string[] StartDate { get; set; }

    [DataMember]
    public string[] EndDate { get; set; }

    [DataMember]
    public string ProductID { get; set; }
}

因为你可以观察到StartDate和Enddate是字符串数组。 我想发送一系列回复。

for (int i = 0; i < DS.Tables[0].Rows.Count; i++)
{
    DemoSearchList.StartDate[i] = Convert.ToString(DS.Tables[0].Rows[i][0]);
    DemoSearchList.EndDate[i] = Convert.ToString(DS.Tables[0].Rows[i][1]);
}

DS是一个数据集。 但我得到一个错误,因为索引越界。任何人都可以请求帮助,如果有任何额外需要宣布并用于实现此目的,请给我打电话

2 个答案:

答案 0 :(得分:1)

这意味着您的阵列大小不正确或尚未初始化。您需要在for循环之前执行此操作:

DemoSearchList.StartDate = new string[DS.Tables[0].Rows.Count];
DemoSearchList.EndDate = new string[DS.Tables[0].Rows.Count];

但我更愿意制作一个列表而不是一个数组(如果你不需要每个值的索引):

[DataContract]
public class DemoSearchList : ReturnValuesBase
{
    public DemoSearchList()
    {
        this.StartDate = new List<string>();
        this.EndDate = new List<string>();
    }

    [DataMember]
    public List<string> StartDate { get; set; }

    [DataMember]
    public List<string> EndDate { get; set; }
}

然后你的for循环看起来像这样:

for (int i = 0; i < DS.Tables[0].Rows.Count; i++)
{
    DemoSearchList.StartDate.Add(Convert.ToString(DS.Tables[0].Rows[i][0]));
    DemoSearchList.EndDate.Add(Convert.ToString(DS.Tables[0].Rows[i][1]));
}

答案 1 :(得分:0)

使用Array length should be defined

StartDate = new String[10]; //can use data row count here
EndDate = new String[10]; //can use data row count here

如果您想使用objects of dynamic length,请使用LIST代替

或将其更改为

[DataMember]
public List<String> StartDate { get; set; }

[DataMember]
 public List<String> EndDate { get; set; }