Exemplo n.º 1
0
 public DateTime?Deserialize(ref MessagePackReader reader, IFormatterResolver formatterResolver)
 {
     if (reader.IsNil())
     {
         return(null);
     }
     return(reader.ReadDateTime());
 }
Exemplo n.º 2
0
        public LocalDate Deserialize(ref MessagePackReader reader, MessagePackSerializerOptions options)
        {
            var           dt  = reader.ReadDateTime();
            LocalDateTime ldt = LocalDateTime.FromDateTime(dt);

            if (ldt.TimeOfDay != LocalTime.Midnight)
            {
                throw new InvalidOperationException($"Local Date should not contain time part. Found {ldt.TimeOfDay} instead of midnight");
            }

            return(LocalDate.FromDateTime(dt));
        }
Exemplo n.º 3
0
        public DateTime Deserialize(ref MessagePackReader reader, MessagePackSerializerOptions options)
        {
            if (reader.NextMessagePackType == MessagePackType.Integer)
            {
                var d = reader.ReadInt64();

                return(d.ToDateTime());
            }
            else
            {
                return(reader.ReadDateTime());
            }
        }
Exemplo n.º 4
0
        public DateTime Deserialize(ref MessagePackReader reader, MessagePackSerializerOptions options)
        {
            if (reader.NextMessagePackType == MessagePackType.String)
            {
                var str = reader.ReadString();

                return(DateTime.Parse(str).ToUniversalTime());
            }
            else
            {
                return(reader.ReadDateTime().ToUniversalTime());
            }
        }
        public DateTimeOffset Deserialize(ref MessagePackReader reader, IFormatterResolver formatterResolver)
        {
            var count = reader.ReadArrayHeader();

            if (count != 2)
            {
                ThrowHelper.ThrowInvalidOperationException_DateTimeOffset_Format();
            }

            var utc             = reader.ReadDateTime();
            var dtOffsetMinutes = reader.ReadInt16();

            return(new DateTimeOffset(utc.Ticks, TimeSpan.FromMinutes(dtOffsetMinutes)));
        }
Exemplo n.º 6
0
        public DateTimeOffset Deserialize(ref MessagePackReader reader, MessagePackSerializerOptions options)
        {
            var count = reader.ReadArrayHeader();

            if (count != 2)
            {
                throw new MessagePackSerializationException("Invalid DateTimeOffset format.");
            }

            DateTime utc = reader.ReadDateTime();

            var dtOffsetMinutes = reader.ReadInt16();

            return(new DateTimeOffset(utc.Ticks, TimeSpan.FromMinutes(dtOffsetMinutes)));
        }
Exemplo n.º 7
0
        public DateTime[] Deserialize(ref MessagePackReader reader, IFormatterResolver formatterResolver)
        {
            if (reader.IsNil())
            {
                return(null);
            }

            var len   = reader.ReadArrayHeader();
            var array = new DateTime[len];

            for (int i = 0; i < array.Length; i++)
            {
                array[i] = reader.ReadDateTime();
            }
            return(array);
        }
Exemplo n.º 8
0
        public void DateTimeTest(DateTime target, int expectedLength)
        {
            var sequence = new Sequence <byte>();
            var writer   = new MessagePackWriter(sequence);

            writer.Write(target);
            writer.Flush();
            var returnLength = sequence.Length;

            returnLength.Is(expectedLength);

            var      sequenceReader = new MessagePackReader(sequence.AsReadOnlySequence);
            DateTime result         = sequenceReader.ReadDateTime();

            sequenceReader.End.IsTrue();

            result.Is(target);
        }
        public object Deserialize(ref MessagePackReader reader, MessagePackSerializerOptions options)
        {
            MessagePackType    type     = reader.NextMessagePackType;
            IFormatterResolver resolver = options.Resolver;

            switch (type)
            {
            case MessagePackType.Integer:
                var code = reader.NextCode;
                if (code >= MessagePackCode.MinNegativeFixInt && code <= MessagePackCode.MaxNegativeFixInt)
                {
                    return(reader.ReadSByte());
                }
                else if (code >= MessagePackCode.MinFixInt && code <= MessagePackCode.MaxFixInt)
                {
                    return(reader.ReadByte());
                }
                else if (code == MessagePackCode.Int8)
                {
                    return(reader.ReadSByte());
                }
                else if (code == MessagePackCode.Int16)
                {
                    return(reader.ReadInt16());
                }
                else if (code == MessagePackCode.Int32)
                {
                    return(reader.ReadInt32());
                }
                else if (code == MessagePackCode.Int64)
                {
                    return(reader.ReadInt64());
                }
                else if (code == MessagePackCode.UInt8)
                {
                    return(reader.ReadByte());
                }
                else if (code == MessagePackCode.UInt16)
                {
                    return(reader.ReadUInt16());
                }
                else if (code == MessagePackCode.UInt32)
                {
                    return(reader.ReadUInt32());
                }
                else if (code == MessagePackCode.UInt64)
                {
                    return(reader.ReadUInt64());
                }

                throw new MessagePackSerializationException("Invalid primitive bytes.");

            case MessagePackType.Boolean:
                return(reader.ReadBoolean());

            case MessagePackType.Float:
                if (reader.NextCode == MessagePackCode.Float32)
                {
                    return(reader.ReadSingle());
                }
                else
                {
                    return(reader.ReadDouble());
                }

            case MessagePackType.String:
                return(reader.ReadString());

            case MessagePackType.Binary:
                // We must copy the sequence returned by ReadBytes since the reader's sequence is only valid during deserialization.
                return(reader.ReadBytes()?.ToArray());

            case MessagePackType.Extension:
                ExtensionHeader ext = reader.ReadExtensionFormatHeader();
                if (ext.TypeCode == ReservedMessagePackExtensionTypeCode.DateTime)
                {
                    return(reader.ReadDateTime(ext));
                }

                throw new MessagePackSerializationException("Invalid primitive bytes.");

            case MessagePackType.Array:
            {
                var length = reader.ReadArrayHeader();
                if (length == 0)
                {
                    return(Array.Empty <object>());
                }

                IMessagePackFormatter <object> objectFormatter = resolver.GetFormatter <object>();
                var array = new object[length];
                options.Security.DepthStep(ref reader);
                try
                {
                    for (int i = 0; i < length; i++)
                    {
                        array[i] = objectFormatter.Deserialize(ref reader, options);
                    }
                }
                finally
                {
                    reader.Depth--;
                }

                return(array);
            }

            case MessagePackType.Map:
            {
                var length = reader.ReadMapHeader();

                IMessagePackFormatter <object> objectFormatter = resolver.GetFormatter <object>();
                var hash = new Dictionary <object, object>(length, options.Security.GetEqualityComparer <object>());
                options.Security.DepthStep(ref reader);
                try
                {
                    for (int i = 0; i < length; i++)
                    {
                        var key = objectFormatter.Deserialize(ref reader, options);

                        var value = objectFormatter.Deserialize(ref reader, options);

                        hash.Add(key, value);
                    }
                }
                finally
                {
                    reader.Depth--;
                }

                return(hash);
            }

            case MessagePackType.Nil:
                reader.ReadNil();
                return(null);

            default:
                throw new MessagePackSerializationException("Invalid primitive bytes.");
            }
        }
 public override DateTime Deserialize(MessagePackReader reader)
 {
     return(reader.ReadDateTime());
 }
        public object Deserialize(ref MessagePackReader reader, IFormatterResolver resolver)
        {
            var type = reader.NextMessagePackType;

            switch (type)
            {
            case MessagePackType.Integer:
                var code = reader.NextCode;
                if (MessagePackCode.MinNegativeFixInt <= code && code <= MessagePackCode.MaxNegativeFixInt)
                {
                    return(reader.ReadSByte());
                }
                else if (MessagePackCode.MinFixInt <= code && code <= MessagePackCode.MaxFixInt)
                {
                    return(reader.ReadByte());
                }
                else if (code == MessagePackCode.Int8)
                {
                    return(reader.ReadSByte());
                }
                else if (code == MessagePackCode.Int16)
                {
                    return(reader.ReadInt16());
                }
                else if (code == MessagePackCode.Int32)
                {
                    return(reader.ReadInt32());
                }
                else if (code == MessagePackCode.Int64)
                {
                    return(reader.ReadInt64());
                }
                else if (code == MessagePackCode.UInt8)
                {
                    return(reader.ReadByte());
                }
                else if (code == MessagePackCode.UInt16)
                {
                    return(reader.ReadUInt16());
                }
                else if (code == MessagePackCode.UInt32)
                {
                    return(reader.ReadUInt32());
                }
                else if (code == MessagePackCode.UInt64)
                {
                    return(reader.ReadUInt64());
                }
                throw new InvalidOperationException("Invalid primitive bytes.");

            case MessagePackType.Boolean:
                return(reader.ReadBoolean());

            case MessagePackType.Float:
                if (MessagePackCode.Float32 == reader.NextCode)
                {
                    return(reader.ReadSingle());
                }
                else
                {
                    return(reader.ReadDouble());
                }

            case MessagePackType.String:
                return(reader.ReadString());

            case MessagePackType.Binary:
                return(reader.ReadBytes());

            case MessagePackType.Extension:
                var ext = reader.ReadExtensionFormatHeader();
                if (ext.TypeCode == ReservedMessagePackExtensionTypeCode.DateTime)
                {
                    return(reader.ReadDateTime(ext));
                }

                throw new InvalidOperationException("Invalid primitive bytes.");

            case MessagePackType.Array:
            {
                var length = reader.ReadArrayHeader();

                var objectFormatter = resolver.GetFormatter <object>();
                var array           = new object[length];
                for (int i = 0; i < length; i++)
                {
                    array[i] = objectFormatter.Deserialize(ref reader, resolver);
                }

                return(array);
            }

            case MessagePackType.Map:
            {
                var length = reader.ReadMapHeader();

                var objectFormatter = resolver.GetFormatter <object>();
                var hash            = new Dictionary <object, object>(length);
                for (int i = 0; i < length; i++)
                {
                    var key = objectFormatter.Deserialize(ref reader, resolver);

                    var value = objectFormatter.Deserialize(ref reader, resolver);

                    hash.Add(key, value);
                }

                return(hash);
            }

            case MessagePackType.Nil:
                reader.ReadNil();
                return(null);

            default:
                throw new InvalidOperationException("Invalid primitive bytes.");
            }
        }
Exemplo n.º 12
0
        public Instant Deserialize(ref MessagePackReader reader, MessagePackSerializerOptions options)
        {
            var dt = reader.ReadDateTime();

            return(Instant.FromDateTimeUtc(dt));
        }
Exemplo n.º 13
0
        public LocalDateTime Deserialize(ref MessagePackReader reader, MessagePackSerializerOptions options)
        {
            var dt = reader.ReadDateTime();

            return(LocalDateTime.FromDateTime(dt));
        }
Exemplo n.º 14
0
        public object Deserialize(ref MessagePackReader reader, IFormatterResolver formatterResolver)
        {
            var type = reader.GetMessagePackType();

            switch (type)
            {
            case MessagePackType.Integer:
                var code = reader.Peek();
                if (MessagePackCode.MinNegativeFixInt <= code && code <= MessagePackCode.MaxNegativeFixInt)
                {
                    return(reader.ReadSByte());
                }
                else if (MessagePackCode.MinFixInt <= code && code <= MessagePackCode.MaxFixInt)
                {
                    return(reader.ReadByte());
                }
                else
                {
                    switch (code)
                    {
                    case MessagePackCode.Int8: return(reader.ReadSByte());

                    case MessagePackCode.Int16: return(reader.ReadInt16());

                    case MessagePackCode.Int32: return(reader.ReadInt32());

                    case MessagePackCode.Int64: return(reader.ReadInt64());

                    case MessagePackCode.UInt8: return(reader.ReadByte());

                    case MessagePackCode.UInt16: return(reader.ReadUInt16());

                    case MessagePackCode.UInt32: return(reader.ReadUInt32());

                    case MessagePackCode.UInt64: return(reader.ReadUInt64());

                    default: ThrowHelper.ThrowInvalidOperationException_Primitive_Bytes(); return(null);
                    }
                }

            case MessagePackType.Boolean:
                return(reader.ReadBoolean());

            case MessagePackType.Float:
                if (MessagePackCode.Float32 == reader.Peek())
                {
                    return(reader.ReadSingle());
                }
                else
                {
                    return(reader.ReadDouble());
                }

            case MessagePackType.String:
                return(reader.ReadString());

            case MessagePackType.Binary:
                return(reader.ReadBytes());

            case MessagePackType.Extension:
                var extTypeCode = reader.GetExtensionFormatTypeCode();
                if (extTypeCode != ReservedMessagePackExtensionTypeCode.DateTime)
                {
                    ThrowHelper.ThrowInvalidOperationException_Primitive_Bytes();
                }
                return(reader.ReadDateTime());

            case MessagePackType.Array:
            {
                var length = reader.ReadArrayHeader();

                var objectFormatter = formatterResolver.GetFormatter <object>();
                var array           = new object[length];
                for (int i = 0; i < length; i++)
                {
                    array[i] = objectFormatter.Deserialize(ref reader, formatterResolver);
                }

                return(array);
            }

            case MessagePackType.Map:
            {
                var length = reader.ReadMapHeader();

                var objectFormatter = formatterResolver.GetFormatter <object>();
                var hash            = new Dictionary <object, object>(length);
                for (int i = 0; i < length; i++)
                {
                    var key   = objectFormatter.Deserialize(ref reader, formatterResolver);
                    var value = objectFormatter.Deserialize(ref reader, formatterResolver);

                    hash.Add(key, value);
                }

                return(hash);
            }

            case MessagePackType.Nil:
                reader.Advance(1);
                return(null);

            default:
                ThrowHelper.ThrowInvalidOperationException_Primitive_Bytes(); return(null);
            }
        }
Exemplo n.º 15
0
 public DateTime Deserialize(ref MessagePackReader reader, IFormatterResolver formatterResolver)
 {
     return(reader.ReadDateTime());
 }