我有一个对象数组,通过对序列化对象数组进行反序列化来创建:
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;
答案 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
只是数组object
中jsonData
的一个实例。您不能item[0]
,因为它本身不是数组。如果你想使用它,只需单独使用item
,即不使用括号。
另一方面,如果object
实际上是一个更加派生的类型,它是一个集合或一个数组本身,那么你可以投射它并像这样使用它:
((MoreDerivedCollectionType) item)[0]