Deserialize() публичный Метод

Deserializes an object from a BsonReader.
public Deserialize ( MongoDB.Bson.IO.BsonReader bsonReader, Type nominalType, Type actualType, IBsonSerializationOptions options ) : object
bsonReader MongoDB.Bson.IO.BsonReader The BsonReader.
nominalType System.Type The nominal type of the object.
actualType System.Type The actual type of the object.
options IBsonSerializationOptions The serialization options.
Результат object
        // public methods
        /// <summary>
        /// Deserializes a value.
        /// </summary>
        /// <param name="context">The deserialization context.</param>
        /// <param name="args">The deserialization args.</param>
        /// <returns>An object.</returns>
        protected override Version DeserializeValue(BsonDeserializationContext context, BsonDeserializationArgs args)
        {
            var bsonReader = context.Reader;

            BsonType bsonType = bsonReader.GetCurrentBsonType();

            switch (bsonType)
            {
            case BsonType.Document:
                int major = 0, minor = 0, build = 0, revision = 0;
                var foundMemberFlags = _helper.DeserializeMembers(context, (elementName, flag) =>
                {
                    switch (flag)
                    {
                    case Flags.Major: major = _int32Serializer.Deserialize(context); break;

                    case Flags.Minor: minor = _int32Serializer.Deserialize(context); break;

                    case Flags.Build: build = _int32Serializer.Deserialize(context); break;

                    case Flags.Revision: revision = _int32Serializer.Deserialize(context); break;
                    }
                });
                switch (foundMemberFlags)
                {
                case Flags.MajorMinor: return(new Version(major, minor));

                case Flags.MajorMinorBuild: return(new Version(major, minor, build));

                case Flags.All: return(new Version(major, minor, build, revision));

                default: throw new BsonInternalException();
                }

            case BsonType.String:
                return(new Version(bsonReader.ReadString()));

            default:
                throw CreateCannotDeserializeFromBsonTypeException(bsonType);
            }
        }
        // public methods
#pragma warning disable 618 // about obsolete BsonBinarySubType.OldBinary
        /// <summary>
        /// Deserializes a value.
        /// </summary>
        /// <param name="context">The deserialization context.</param>
        /// <param name="args">The deserialization args.</param>
        /// <returns>A deserialized value.</returns>
        protected override BitArray DeserializeValue(BsonDeserializationContext context, BsonDeserializationArgs args)
        {
            var      bsonReader = context.Reader;
            BitArray bitArray;

            BsonType bsonType = bsonReader.GetCurrentBsonType();

            switch (bsonType)
            {
            case BsonType.Binary:
                return(new BitArray(bsonReader.ReadBytes()));

            case BsonType.Document:
                int    length = 0;
                byte[] bytes  = null;
                _helper.DeserializeMembers(context, (elementName, flag) =>
                {
                    switch (flag)
                    {
                    case Flags.Length: length = _int32Serializer.Deserialize(context); break;

                    case Flags.Bytes: bytes = bsonReader.ReadBytes(); break;
                    }
                });
                bitArray        = new BitArray(bytes);
                bitArray.Length = length;
                return(bitArray);

            case BsonType.String:
                var s = bsonReader.ReadString();
                bitArray = new BitArray(s.Length);
                for (int i = 0; i < s.Length; i++)
                {
                    var c = s[i];
                    switch (c)
                    {
                    case '0':
                        break;

                    case '1':
                        bitArray[i] = true;
                        break;

                    default:
                        throw new FormatException("String value is not a valid BitArray.");
                    }
                }
                return(bitArray);

            default:
                throw CreateCannotDeserializeFromBsonTypeException(bsonType);
            }
        }
        // public methods
        /// <summary>
        /// Deserializes a value.
        /// </summary>
        /// <param name="context">The deserialization context.</param>
        /// <param name="args">The deserialization args.</param>
        /// <returns>A deserialized value.</returns>
        public override DateTimeOffset Deserialize(BsonDeserializationContext context, BsonDeserializationArgs args)
        {
            var      bsonReader = context.Reader;
            long     ticks;
            TimeSpan offset;

            BsonType bsonType = bsonReader.GetCurrentBsonType();

            switch (bsonType)
            {
            case BsonType.Array:
                bsonReader.ReadStartArray();
                ticks  = bsonReader.ReadInt64();
                offset = TimeSpan.FromMinutes(bsonReader.ReadInt32());
                bsonReader.ReadEndArray();
                return(new DateTimeOffset(ticks, offset));

            case BsonType.DateTime:
                var millisecondsSinceEpoch = bsonReader.ReadDateTime();
                return(DateTimeOffset.FromUnixTimeMilliseconds(millisecondsSinceEpoch));

            case BsonType.Document:
                ticks  = 0;
                offset = TimeSpan.Zero;
                _helper.DeserializeMembers(context, (elementName, flag) =>
                {
                    switch (flag)
                    {
                    case Flags.DateTime: bsonReader.SkipValue(); break;         // ignore value

                    case Flags.Ticks: ticks = _int64Serializer.Deserialize(context); break;

                    case Flags.Offset: offset = TimeSpan.FromMinutes(_int32Serializer.Deserialize(context)); break;
                    }
                });
                return(new DateTimeOffset(ticks, offset));

            case BsonType.String:
                return(JsonConvert.ToDateTimeOffset(bsonReader.ReadString()));

            default:
                throw CreateCannotDeserializeFromBsonTypeException(bsonType);
            }
        }