//更新设备状态信息 private void QueryTerminalInfos(ICollection <ClassRoom> classrooms) { ICollection <ClassroomBuilding> classroomBuildings = new List <ClassroomBuilding>(); foreach (var classroom in classrooms) { classroomBuildings.Add(classroom.ClassroomBuilding); classroom.ClassroomBuilding = null; } //JsonSerializerSettings settings = new JsonSerializerSettings(); //settings.ReferenceLoopHandling = ReferenceLoopHandling.Ignore; //settings.MissingMemberHandling = MissingMemberHandling.Ignore; //string jClassrooms = JsonConvert.SerializeObject(classrooms, settings); //JArray j = JArray.Parse(jClassrooms); //object cls = j.ToObject<ICollection<ClassRoom>>(); JObject jo = restConnection.Post("api/TerminalInfo/QueryLastTerminalInfos", classrooms); foreach (var classroom in classrooms) { classroom.ClassroomBuilding = classroomBuildings.ElementAt(classrooms.ToList().IndexOf(classroom)); } if (jo.Value <bool>("success")) { JArray ja = jo.Value <JArray>("data"); if (null != ja) { Collection <TerminalInfo> terminalInfos = ja.ToObject <Collection <TerminalInfo> >(); foreach (var terminalInfo in terminalInfos) { ClassRoom classroom = classrooms.Where(p => p.TerminalId.Equals(terminalInfo.TerminalId)).FirstOrDefault(); if (null != classroom) { terminalInfo.Name = classroom.ClassroomBuilding.BuildingName + "_" + classroom.RoomNum; } } //删除未选择的教室 ICollection <TerminalInfo> removeItems = TerminalInfos.Where(p => !terminalInfos.Select(o => o.TerminalId).Contains(p.TerminalId)).ToList(); foreach (var item in removeItems) { TerminalInfos.Remove(item); } //更新原选择教室的信息 PropertyInfo[] properties = typeof(TerminalInfo).GetProperties(BindingFlags.DeclaredOnly | BindingFlags.Public | BindingFlags.Instance); foreach (var item in TerminalInfos) { TerminalInfo terminalInfo = terminalInfos.Where(p => p.TerminalId == item.TerminalId).FirstOrDefault(); if (null != terminalInfo) { foreach (PropertyInfo property in properties) { property.SetValue(item, property.GetValue(terminalInfo, null), null); } } } //增加新选择的教室 ICollection <TerminalInfo> addItems = terminalInfos.Where(p => !TerminalInfos.Select(o => o.TerminalId).Contains(p.TerminalId)).ToList(); foreach (var item in addItems) { TerminalInfos.Add(item); } } } }