コード例 #1
0
        private void ParseOpaque(ref PacketReader reader)
        {
            var customType = (ColumnType)reader.ReadByte();
            int length     = ReadDataLength(ref reader);

            // In JSON fractional seconds part always has 3 bytes
            // Format is the same as ParseDateTime2 but data is in little-endian order
            // TIMESTAMP is converted to DATETIME by the server
            // DATETIME2 dates have ColumnType.DATETIME marker which is confusing
            switch (customType)
            {
            case ColumnType.DECIMAL:
            case ColumnType.NEWDECIMAL:
                int metadata = reader.ReadUInt16LittleEndian();
                var number   = ColumnParser.ParseNewDecimal(ref reader, metadata);
                _writer.WriteValue((string)number);
                break;

            case ColumnType.DATE:
                _writer.WriteDate(ReadDateTime(ref reader));
                break;

            case ColumnType.TIME:
            case ColumnType.TIME2:
                _writer.WriteTime(ReadTime(ref reader));
                break;

            case ColumnType.DATETIME:
            case ColumnType.DATETIME2:
            case ColumnType.TIMESTAMP:
            case ColumnType.TIMESTAMP2:
                _writer.WriteDateTime(ReadDateTime(ref reader));
                break;

            default:
                var opaque = reader.ReadByteArraySlow(length);
                _writer.WriteOpaque(customType, opaque);
                break;
            }
        }
コード例 #2
0
ファイル: Encoder.cs プロジェクト: mjavidi/dropbox-sdk-dotnet
 /// <summary>
 /// The encode.
 /// </summary>
 /// <param name="value">The value.</param>
 /// <param name="writer">The writer.</param>
 public void Encode(DateTime value, IJsonWriter writer)
 {
     writer.WriteDateTime(value);
 }
コード例 #3
0
        public override void Serialize(IJsonWriter writer, object value)
        {
            if (writer == null)
            {
                throw new ArgumentNullException("writer");
            }
            if (value == null)
            {
                throw new ArgumentNullException("value");
            }

            switch (primitiveTypeCode)
            {
            case TypeCode.Boolean:
                writer.WriteBoolean((bool)value);
                break;

            case TypeCode.Byte:
                writer.WriteNumber((byte)value);
                break;

            case TypeCode.DateTime:
                writer.WriteDateTime((DateTime)value);
                break;

            case TypeCode.Decimal:
                writer.WriteNumber((decimal)value);
                break;

            case TypeCode.Double:
                writer.WriteNumber((double)value);
                break;

            case TypeCode.Int16:
                writer.WriteNumber((short)value);
                break;

            case TypeCode.Int32:
                writer.WriteNumber((int)value);
                break;

            case TypeCode.Int64:
                writer.WriteNumber((long)value);
                break;

            case TypeCode.SByte:
                writer.WriteNumber((sbyte)value);
                break;

            case TypeCode.Single:
                writer.WriteNumber((float)value);
                break;

            case TypeCode.UInt16:
                writer.WriteNumber((ushort)value);
                break;

            case TypeCode.UInt32:
                writer.WriteNumber((uint)value);
                break;

            case TypeCode.UInt64:
                writer.WriteNumber((ulong)value);
                break;

            default:
                var valueStr = default(string);

                if (value is IFormattable)
                {
                    valueStr = (string)Convert.ChangeType(value, typeof(string), writer.Context.Format);
                }
                else
                {
                    valueStr = value.ToString();
                }

                writer.WriteString(valueStr);
                break;
            }
        }