如何引用对象数组中的数组元素?

时间:2016-08-22 14:55:38

标签: c# arrays

我有一个对象数组,通过对序列化对象数组进行反序列化来创建:

UPDATE instructor i
JOIN instructor_school as i_s ON i_s.instructor_id = i.id
JOIN school as s on s.id=i_s.school_id
SET i.deleted = 1
where s.deleted = 1

包含:

object[] jsonData = JsonConvert.DeserializeObject<object[]>(json);

这看起来像一个包含数组的对象数组。

我使用以下迭代器:

{[3,"2016-06-11T08:35:00","Fleet Discussion ",1,"Maintenance"]}
{[7,"2016-07-14T09:45:00","Fleet Discussion, MX Issues",1,"Maintenance"]}
{[8,"2016-08-18T08:30:00","Fleet Discussion, APU",1,"Maintenance"]}

每个项目都被提取出来,因此对于每个项目,我都有一个包含数组的对象:

foreach (object item in jsonData) {
    // do stuff
}

但是,任何使用item [0]的尝试都是错误的(不能用[]索引对象。)

那么,如何引用对象内的数组元素?或者,如何从对象中提取数组?

编辑:更详细信息:

以下是创建序列化对象的方法。希望这会有所帮助:

{[3,"2016-06-11T08:35:00","Fleet Discussion ",1,"Maintenance"]}

(这些私有字段有getter / setter。)

然后:

private List<object> _Meetings = new List<object>{};
private string _Meetings_JSON = null;

2 个答案:

答案 0 :(得分:2)

item是一个对象,而不是一个数组。使用item访问它而不使用[0]。

基于更多信息的编辑

我会完全改写。为此会议对象创建一个类:

public class Meeting
{
    public int meetingID { get; set; }
    public DateTime meetingDateTime { get; set; }
    public String agenda { get; set; }
    public int meetingTypeId { get; set; }
    public String meetingType { get; set; }
}

阅读时使用:

private List<Meeting> _Meetings = new List<Meeting>{};
//...

while (rs.Read()) {

    Meeting rec = new Meeting() {
        meetingID = rs[MEETING_ID],
        meetingDateTime = rs[MEETING_DATETIME],
        agenda = rs[AGENDA],
        meetingTypeId = rs[MEETING_TYPE_ID],
        meetingType = rs[MEETING_TYPE]
    };

    _Meetings.Add(rec);

}

然后你应该有一个你可以在你的foreach中引用的Meeting对象:

Meeting[] jsonData = JsonConvert.DeserializeObject<Meeting[]>(json);

foreach (Meeting item in jsonData) {
    // do stuff
}

答案 1 :(得分:0)

item只是数组objectjsonData的一个实例。您不能item[0],因为它本身不是数组。如果你想使用它,只需单独使用item,即不使用括号。

另一方面,如果object实际上是一个更加派生的类型,它是一个集合或一个数组本身,那么你可以投射它并像这样使用它:

((MoreDerivedCollectionType) item)[0]