private void WriteValueBytes(Stream stream, object value, Type type) { if (type == typeof(byte)) { stream.WriteByte((byte)value); } else if (type == typeof(bool)) { var bytes = BitConverter.GetBytes((bool)value); stream.Write(bytes, 0, bytes.Length); } else if (type == typeof(short)) { var bytes = BitConverter.GetBytes((short)value); stream.Write(bytes, 0, bytes.Length); } else if (type == typeof(int)) { var bytes = BitConverter.GetBytes((int)value); stream.Write(bytes, 0, bytes.Length); } else if (type == typeof(long)) { var bytes = BitConverter.GetBytes((long)value); stream.Write(bytes, 0, bytes.Length); } else if (type == typeof(ushort)) { var bytes = BitConverter.GetBytes((ushort)value); stream.Write(bytes, 0, bytes.Length); } else if (type == typeof(uint)) { var bytes = BitConverter.GetBytes((uint)value); stream.Write(bytes, 0, bytes.Length); } else if (type == typeof(ulong)) { var bytes = BitConverter.GetBytes((ulong)value); stream.Write(bytes, 0, bytes.Length); } else if (type == typeof(double)) { var bytes = BitConverter.GetBytes((double)value); stream.Write(bytes, 0, bytes.Length); } else if (type == typeof(decimal)) { var bytes = TypesInfo.GetDecimalBytes((decimal)value); stream.Write(bytes, 0, bytes.Length); } else if (type == typeof(float)) { var bytes = BitConverter.GetBytes((float)value); stream.Write(bytes, 0, bytes.Length); } else if (type == typeof(char)) { var bytes = BitConverter.GetBytes((char)value); stream.Write(bytes, 0, bytes.Length); } else if (type == typeof(Guid)) { var bytes = ((Guid)value).ToByteArray(); stream.Write(bytes, 0, bytes.Length); } else if (type == typeof(string)) { WriteString(stream, (string)value); } else if (type == typeof(DateTime)) { var dateTimeValue = ((DateTime)value); var kind = dateTimeValue.Kind; stream.WriteByte((byte)kind); var dateTimeBytes = BitConverter.GetBytes(((DateTime)value).Ticks); stream.Write(dateTimeBytes, 0, dateTimeBytes.Length); } else if (type == typeof(DateTimeOffset)) { var dateTimeOffsetValue = ((DateTimeOffset)value); var offsetBytes = BitConverter.GetBytes(dateTimeOffsetValue.Offset.Ticks); stream.Write(offsetBytes, 0, offsetBytes.Length); var dateTimeAsLong = dateTimeOffsetValue.Ticks; var dateTimeBytes = BitConverter.GetBytes(dateTimeAsLong); stream.Write(dateTimeBytes, 0, dateTimeBytes.Length); } else { throw new NotImplementedException("Only primitive types are supported"); } }