我有一个对象数组,通过反序列化序列化对象数组创建:
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
}
每个项都被提取出来,因此对于每个项,我都有一个包含数组的对象:
{[3,"2016-06-11T08:35:00","Fleet Discussion ",1,"Maintenance"]}
但是,任何使用item[0]的尝试都是错误的(不能用[]索引对象)。
那么,如何在对象中引用数组元素呢?或者,如何从对象中提取数组?
编辑:进一步的细节:
下面是创建序列化对象的方法。希望有帮助:
private List<object> _Meetings = new List<object>{};
private string _Meetings_JSON = null;
(这些私有字段有getter/setter)
之后:
if (rs.HasRows) {
while (rs.Read()) {
object[] rec = new object[5];
rec[MEETING_ID] = (int) rs[MEETING_ID];
rec[MEETING_DATETIME] = (DateTime) rs[MEETING_DATETIME];
rec[AGENDA] = (string) rs[AGENDA];
rec[MEETING_TYPE_ID] = (int) rs[MEETING_TYPE_ID];
rec[MEETING_TYPE] = (string) rs[MEETING_TYPE];
_Meetings.Add(rec);
}
_Meeting_JSON = JsonConvert.SerializeObject(_Meetings);
}
item是对象,而不是数组。使用不带[0]的item
访问。
基于进一步信息编辑
我会完全重写。为会议对象创建一个类,如下所示:
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; }
}
读取时使用this:
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
}
item
只是您的数组jsonData
的object
的单个实例。你不能做item[0]
因为它本身不是一个数组。如果你想使用它,只使用item
本身,即没有括号。
另一方面,如果object
实际上是一个派生类型,它本身是一个集合或数组,那么您可以强制转换它并像这样使用它:
((MoreDerivedCollectionType) item)[0]