public static ObjSubList[] CreateSubList(XmlNode nodeObject, string listName, ObjBill schemaBill, bool isSub) { //选取ObjectList节点 XmlNodeList listList = nodeObject.SelectNodes("ObjectList"); //根据节点数建立实体集 ObjSubList[] sublists = new ObjSubList[listList.Count]; //遍历结点 for (int j = 0; j < listList.Count; j++) { //从该结点获取一个ObjectList的Name string subListName = ((XmlElement)listList[j]).GetAttribute("Name"); string subListText = ((XmlElement)listList[j]).GetAttribute("Text"); //建立Sublist对象 ObjSubList objSubList = new ObjSubList(); objSubList.Name = subListName; objSubList.Text = subListText; var temp = schemaBill.GetSubListsDict()[subListName]; if (temp != null) { objSubList.Align = temp.Align; objSubList.HideWhenEmpty = temp.HideWhenEmpty; } //把billschema的columnList的信息赋给bill //从该结点中获取Object节点集,对应Sublist的行数据 XmlNodeList objlist = listList[j].SelectNodes("Object"); //根据xml数据中的object节点数建立sublist对象的rowlist数组 objSubList.RowList = new ObjRow[objlist.Count]; //遍历 object节点集,以构建数据 for (int i = 0; i < objlist.Count; i++) { //得到object的name string rowName = ((XmlElement)objlist[i]).GetAttribute("Name"); string rowID = ((XmlElement)objlist[i]).GetAttribute("id"); if (string.IsNullOrEmpty(rowID)) { // continue; } //从object结点中得到所有的attribute,即该行的所有字段 XmlNodeList list = objlist[i].SelectNodes("Attribute"); //建立对应的objrow对象以容纳字段数据 ObjRow row = new ObjRow(); row.Name = rowName; row.Id = rowID; //根据attribut的数量建立fieldlist数组 row.ObjFieldList = new ObjField[list.Count]; //遍历attribute结点 for (int m = 0; m < list.Count; m++) { //从attribute节点中得到数据信息 XmlElement node = list[m] as XmlElement; string Name = ((XmlElement)node).GetAttribute("Name"); string Text = ((XmlElement)node).GetAttribute("Text"); string DataType = ((XmlElement)node).GetAttribute("DataType"); string DataValue = ((XmlElement)node).GetAttribute("DataValue"); //建立对应的objfield对象 ObjField dataField = new ObjField(); dataField.Name = Name; //dataField.Text = Text; dataField.DataType = DataType; dataField.DataValue = DataValue; string fgColor = string.Empty; string Tooltip = string.Empty; if (node.HasAttribute("Color")) { fgColor = node.GetAttribute("Color"); } if (node.HasAttribute("Tooltip")) { Tooltip = node.GetAttribute("Tooltip"); } dataField.Color = fgColor; dataField.Tooltip = Tooltip; //如果能够在配置文件中找到对应的定义项,则把该定义项的相关信息赋值到该对象。 //通过Name作为key进行过索引 if (schemaBill.GetSubListsDict()[subListName] != null && schemaBill.GetSubListsDict()[subListName].GetRowDict()[rowID] != null && schemaBill.GetSubListsDict()[subListName].GetRowDict()[rowID].GetObjFieldDict()[Name] != null) { ObjField schemaField = schemaBill.GetSubListsDict()[subListName].GetRowDict()[rowID].GetObjFieldDict()[Name]; dataField.Colspan = schemaField.Colspan; dataField.IsVisible = schemaField.IsVisible; dataField.CssName = schemaField.CssName; dataField.ColumnOrder = schemaField.ColumnOrder; } //把建立的field对象赋给对应索引的fieldlist数组。 row.ObjFieldList[m] = dataField; } //把建立的row对象赋给对应索引的 rowlist数组 objSubList.RowList[i] = row; row.SubSubList = CreateSubList(objlist[i], objSubList.Name, schemaBill, true); } //把建立的sublist对象赋给对应索引的sublist数组 if (schemaBill.GetSubListsDict()[objSubList.Name] != null && isSub == false) { objSubList.ColumnList = schemaBill.GetSubListsDict()[objSubList.Name].ColumnList; } //把建立的sublist对象赋给对应索引的sublist数组 if (schemaBill.GetSubListsDict()[listName] != null && isSub == true) { objSubList.ColumnList = schemaBill.GetSubListsDict()[listName].SubColumnList; } sublists[j] = objSubList; } return(sublists); }
/// <summary> /// Creates a JSON objectstring to render the reserved Seats in the view /// </summary> /// <param name="Room">A Room of type Room.</param> /// <param name="Seats">A list of type ReservedSeat.</param> /// <returns>A JSON string to the ViewModel</returns> public static string JSONSeating(Room Room, List <ReservedSeat> Seats) { if (Room == null) { Room = new Room(); } List <ObjRow> ObjRowList = new List <ObjRow>(); for (var j = 1; j <= Room.Rows; j++) { List <ObjSeat> objSeatList = new List <ObjSeat>(); for (var i = 1; i <= (Room.Capacity / Room.Rows); i++) { ObjSeat ObjSeat = new ObjSeat { GridSeatNum = i, seatNumber = i, SeatStatus = "0" }; var seatTaken = 0; Seats.ForEach(s => { if (s.SeatId == i & s.RowId == j & s.SeatState == SeatState.Reserved) { seatTaken = 1; } if (s.SeatId == i & s.RowId == j & s.SeatState == SeatState.Disabled) { seatTaken = 2; } }); if (seatTaken > 0) { ObjSeat.SeatStatus = seatTaken.ToString(); seatTaken = 0; } objSeatList.Add(ObjSeat); } ObjRow ObjRow = new ObjRow { GridRowId = j, PhyRowId = j.ToString(), objSeat = objSeatList }; ObjRowList.Add(ObjRow); } ObjArea ObjArea = new ObjArea { AreaDesc = "EXECUTIVE", AreaCode = "0000000003", AreaNum = "1", HasCurrentOrder = true, objRow = ObjRowList }; List <ObjArea> ObjAreaList = new List <ObjArea>(); ObjAreaList.Add(ObjArea); ColAreas ColAreas = new ColAreas { Count = 1, intMaxSeatId = 21, intMinSeatId = 2, objArea = ObjAreaList }; SeatLayout SeatLayout = new SeatLayout { colAreas = ColAreas }; List <object> areaList = new List <object>(); List <object> groupedSeatsList = new List <object>(); Root Root = new Root { product_id = 46539040, freeSeating = false, tempTransId = "1ecae165f2d86315fea19963d0ded41a", seatLayout = SeatLayout, areas = areaList, groupedSeats = groupedSeatsList }; var encoderSettings = new TextEncoderSettings(); encoderSettings.AllowCharacters('\u0022'); encoderSettings.AllowRange(UnicodeRanges.BasicLatin); var options = new JsonSerializerOptions { Encoder = JavaScriptEncoder.Create(encoderSettings), WriteIndented = true }; string jsonString = JsonSerializer.Serialize(Root, options); return(jsonString); }