/// <summary> /// Obsolete - only backward compatibility /// </summary> internal static void WriteValue(BinaryWriter writer, DataTable dt, Encoding encoding) { if (dt == null) { WriteNullValue(writer); return; } // column count NumericSerializers.WriteUIntNullableMemberCount(writer, (uint)dt.Columns.Count); // table name WriteValue(writer, dt.TableName, encoding); // columns foreach (DataColumn col in dt.Columns) { WriteValue(writer, col.Caption, encoding); WriteValue(writer, col.ColumnName, encoding); var dataType = col.DataType?.ToString(); if (dataType != null && dataType.StartsWith("System.")) { dataType = "0." + dataType.Remove(0, "System.".Length); } WriteValue(writer, dataType, encoding); } NumericSerializers.WriteVarInt(writer, dt.Rows.Count); foreach (DataRow row in dt.Rows) { for (var colIndex = 0; colIndex < row.ItemArray.Length; colIndex++) { var item = row.ItemArray[colIndex]; var itemType = dt.Columns[colIndex].DataType; var basicTypeInfo = BoisTypeCache.GetBasicType(itemType); if (basicTypeInfo.KnownType == EnBasicKnownType.Unknown) { throw new Exception($"Serialization of DataTable with item type of '{itemType}' is not supported."); } var itemToWrite = item; if (itemType == typeof(string)) { itemToWrite = item == DBNull.Value ? null : item.ToString(); } else if (item == DBNull.Value) { itemToWrite = null; } // write the object WriteRootBasicType(writer, itemToWrite, itemType, basicTypeInfo, encoding); } } }
internal static void WriteRootBasicTypedArray(BinaryWriter writer, Array array, BoisBasicTypeInfo typeInfo, Encoding encoding) { if (array == null) { PrimitiveWriter.WriteNullValue(writer); return; } var arrayItemType = typeInfo.BareType; var arrayItemTypeType = BoisTypeCache.GetBasicType(typeInfo.BareType); // Int32 NumericSerializers.WriteUIntNullableMemberCount(writer, (uint)array.Length); for (int i = 0; i < array.Length; i++) { WriteRootBasicType(writer, array.GetValue(i), arrayItemType, arrayItemTypeType, encoding); } }