/////////////////////////////////////////////////////////////////////// public static void SerializeDataTable(BinaryTypesWriter bw, DataTable table) { Type[] columnTypes = new Type[table.Columns.Count]; //write table name bw.Write(table.TableName); //write columns count bw.Write7BitInt(table.Columns.Count); for (int i = 0; i < columnTypes.Length; i++) { //write column name and type bw.Write(table.Columns[i].ColumnName); bw.Write(table.Columns[i].DataType.FullName); columnTypes[i] = table.Columns[i].DataType; } //write rows count bw.Write7BitInt(table.Rows.Count); foreach (DataRow row in table.Rows) { for (int i = 0; i < columnTypes.Length; i++) { if (row.IsNull(i)) { bw.Write(""); continue; } if (columnTypes[i] == typeof(System.String)) { bw.Write((string)row[i]); } else if (columnTypes[i] == typeof(System.Int32)) { bw.Write7BitInt((int)row[i]); } else if (columnTypes[i] == typeof(System.Int64)) { bw.Write7BitLong((long)row[i]); } else if (columnTypes[i] == typeof(System.Decimal)) { bw.WriteCompactDecimal((decimal)row[i]); } else if (columnTypes[i] == typeof(System.DateTime)) { bw.WriteCompactDateTime((DateTime)row[i], TimeSpan.TicksPerMillisecond * 100); } else if (columnTypes[i] == typeof(bool)) { bw.Write((bool)row[i]); } } } }
/////////////////////////////////////////////////////////////////////// public static void SerializeList <T>(BinaryTypesWriter bw, List <T> list, WriteDataDelegate <T> itemWriter, object objParam) { if (list != null) { bw.Write7BitInt(list.Count); foreach (T item in list) { itemWriter(bw, item, objParam); } } else { bw.Write7BitInt((Int32)0); } }
/////////////////////////////////////////////////////////////////////// public static void SerializeDictionary <K, V>( BinaryTypesWriter bw, IDictionary <K, V> map, WriteDataDelegate <K> keyWriter, object keyObjParam, WriteDataDelegate <V> ValWriter, object valObjParam) { bw.Write7BitInt(map.Count); foreach (KeyValuePair <K, V> keyValue in map) { keyWriter(bw, keyValue.Key, keyObjParam); ValWriter(bw, keyValue.Value, valObjParam); } }
public static void WriteInt(BinaryTypesWriter bw, int val, object objParam) { bw.Write7BitInt(val); }