internal void DoReadNodes <IDbObject>(DbtFileTags top, DbtFileTags second, List <IDbObject> list) where IDbObject : class { Type dbobjtype = MyDbHelper.GetDbObjectType(typeof(IDbObject), _dbDefine.DbType); if (dbobjtype != null) { DoReadObjects <IDbObject>(dbobjtype, top, second, list); } }
public DbData GetNextDataRow() { if (_datasEnd) { return(null); } string str = ""; while (!_fileReader.EndOfStream) { if (_hasReadDatasStart)//Datas { DATA: while (!_fileReader.EndOfStream) { if (_hasReadDataStart)//Data { while (!_fileReader.EndOfStream) { if (_hasReadValueStart || _hasReadValueContinue)//读数据 { if (!_hasReadValueStart) { while (!_fileReader.EndOfStream) { str = ReadLine(); if (string.IsNullOrWhiteSpace(str)) { continue; } if (CheckTagStart(DbtFileTags.DataValue, str)) { _hasReadValueStart = true; break; } else if (CheckTagEnd(DbtFileTags.Data, str)) { _hasReadDataStart = false; _hasReadValueContinue = false; goto DATA; } } } if (!_hasReadValueStart) { return(null); } str = DoInReadTagContentNoStart(DbtFileTags.DataValue); //[1.0,1.0,"eeee","dd ","2015-10-29T00:00:00",null,null,"","rew",2222222222222.0,"你哈哈哈 ",null,null,null,null,"分隔 "] // Console.WriteLine(str); string[] objs = Newtonsoft.Json.JsonConvert.DeserializeObject <string[]>(str); object[] vals = new object[objs.Length]; for (int i = 0; i < objs.Length; i++) { if (objs[i] == null) { vals[i] = null; continue; } if (curTableColumnType[i] == typeof(sbyte)) { vals[i] = sbyte.Parse(objs[i]); } else if (curTableColumnType[i] == typeof(short)) { vals[i] = short.Parse(objs[i]); } else if (curTableColumnType[i] == typeof(ushort)) { vals[i] = ushort.Parse(objs[i]); } else if (curTableColumnType[i] == typeof(int)) { vals[i] = int.Parse(objs[i]); } else if (curTableColumnType[i] == typeof(uint)) { vals[i] = uint.Parse(objs[i]); } else if (curTableColumnType[i] == typeof(long)) { vals[i] = long.Parse(objs[i]); } else if (curTableColumnType[i] == typeof(ulong)) { vals[i] = ulong.Parse(objs[i]); } else if (curTableColumnType[i] == typeof(decimal)) { vals[i] = decimal.Parse(objs[i]); } else if (curTableColumnType[i] == typeof(float)) { vals[i] = float.Parse(objs[i]); } else if (curTableColumnType[i] == typeof(double)) { vals[i] = double.Parse(objs[i]); } else if (curTableColumnType[i] == typeof(bool)) { vals[i] = bool.Parse(objs[i]); } else if (curTableColumnType[i] == typeof(char)) { vals[i] = char.Parse(objs[i]); } else if (curTableColumnType[i] == typeof(DateTime)) { vals[i] = DateTime.Parse(objs[i]); } else { vals[i] = objs[i]; } } DbData data = new DbData(_dbDefine.DbType, curTableName, curTableColumnNames, curTableColumnType, curTableDbColumnType, null); data.TableDataRow.base64TableValues = vals; data.TableDataRow.ConvertValuesFromBase64(); _hasReadValueStart = false; _hasReadValueContinue = true; return(data); } else//读列定义 { while (!_fileReader.EndOfStream) { str = ReadLine(); if (string.IsNullOrWhiteSpace(str)) { continue; } if (CheckTagStart(DbtFileTags.DataTableName, str)) { curTableName = Newtonsoft.Json.JsonConvert.DeserializeObject <string>(DoInReadTagContentNoStart(DbtFileTags.DataTableName)); } else if (CheckTagStart(DbtFileTags.DataColumnType, str)) { curTableColumnType = Newtonsoft.Json.JsonConvert.DeserializeObject <Type[]>(DoInReadTagContentNoStart(DbtFileTags.DataColumnType)); } else if (CheckTagStart(DbtFileTags.DataColumnDbType, str)) { Type type = MyDbHelper.GetDbObjectType(typeof(IDataDbType[]), _dbtFile.DbType); str = DoInReadTagContentNoStart(DbtFileTags.DataColumnDbType); Array objs = (Array)Newtonsoft.Json.JsonConvert.DeserializeObject(str, type); curTableDbColumnType = new object[objs.Length]; objs.CopyTo(curTableDbColumnType, 0); /* * switch (_dbtFile.DbType) * { * case MyDbType.None: * break; * case MyDbType.Oracle: * OracleDbType[] dbtypes = Newtonsoft.Json.JsonConvert.DeserializeObject<OracleDbType[]>(DoInReadTagContentNoStart(DbtFileTags.DataColumnDbType)); * curTableDbColumnType = new object[dbtypes.Length]; * for (int i=0;i<dbtypes.Length;i++) * { * curTableDbColumnType[i] = dbtypes[i]; * } * break; * case MyDbType.MySql: * break; * case MyDbType.SqlServer: * break; * default: * break; * }*/ } else if (CheckTagStart(DbtFileTags.DataCulumnName, str)) { curTableColumnNames = Newtonsoft.Json.JsonConvert.DeserializeObject <string[]>(DoInReadTagContentNoStart(DbtFileTags.DataCulumnName)); } else if (CheckTagStart(DbtFileTags.DataCount, str)) { curTableDataCount = Newtonsoft.Json.JsonConvert.DeserializeObject <decimal>(str); } else if (CheckTagStart(DbtFileTags.DataValue, str)) { _hasReadValueStart = true; break; } else if (CheckTagEnd(DbtFileTags.Data, str)) { _hasReadDataStart = false; goto DATA; } } } } break; } else { str = ReadLine(); if (string.IsNullOrWhiteSpace(str)) { continue; } if (CheckTagStart(DbtFileTags.Data, str)) { _hasReadDataStart = CheckTagStart(DbtFileTags.Data, str); } else if (CheckTagEnd(DbtFileTags.Datas, str)) { _datasEnd = true; return(null); } } } break; } else { str = ReadLine(); if (string.IsNullOrWhiteSpace(str)) { continue; } _hasReadDatasStart = CheckTagStart(DbtFileTags.Datas, str); if (!_hasReadDatasStart) { if (CheckTagEnd(DbtFileTags.DbTFile, str)) { _datasEnd = true; return(null); } } } } return(null); }