Пример #1
0
 void IBsonSerializer.Serialize(BsonSerializationContext context, BsonSerializationArgs args, object value)
 {
     Serialize(context, args, (TClass)value);
 }
        /// <summary>
        /// Serializes a value.
        /// </summary>
        /// <param name="context">The serialization context.</param>
        /// <param name="args">The serialization args.</param>
        /// <param name="value">The object.</param>
        protected override void SerializeValue(BsonSerializationContext context, BsonSerializationArgs args, BsonBoolean value)
        {
            var bsonWriter = context.Writer;

            bsonWriter.WriteBoolean(value.Value);
        }
Пример #3
0
 public override void Serialize(BsonSerializationContext context, BsonSerializationArgs args, Dictionary value)
 {
     BsonDocumentSerializer.Instance.Serialize(context, args, value.ToBsonDocument());
 }
Пример #4
0
 /// <summary>Null value is handled via [BsonIgnoreIfNull] attribute and is not expected here.</summary>
 public override void Serialize(BsonSerializationContext context, BsonSerializationArgs args, IsoDayOfWeek value)
 {
     // Extension method AsString() uses three-letter format
     context.Writer.WriteString(value.AsString());
 }
Пример #5
0
 public override void Serialize(BsonSerializationContext context, BsonSerializationArgs args, decimal value)
 {
     context.Writer.WriteDouble((double)value);
 }
        /// <summary>
        /// Serializes a value.
        /// </summary>
        /// <param name="context">The serialization context.</param>
        /// <param name="args">The serialization args.</param>
        /// <param name="value">The object.</param>
        protected override void SerializeValue(BsonSerializationContext context, BsonSerializationArgs args, RawBsonArray value)
        {
            var bsonWriter = context.Writer;

            bsonWriter.WriteRawBsonArray(value.Slice);
        }
Пример #7
0
 public override void Serialize(BsonSerializationContext context, BsonSerializationArgs args, CollectionOptionsWrapper value)
 {
     value.SerializeWrappedObject(context);
 }
Пример #8
0
 /// <summary>
 /// Serializes a value.
 /// </summary>
 /// <param name="context">The serialization context.</param>
 /// <param name="args">The serialization args.</param>
 /// <param name="value">The value.</param>
 protected override void SerializeValue(BsonSerializationContext context, BsonSerializationArgs args, GeoJsonPolygon <TCoordinates> value)
 {
     _helper.SerializeMembers(context, value, SerializeDerivedMembers);
 }
Пример #9
0
 /// <summary>
 /// Serializes a value.
 /// </summary>
 /// <param name="context">The serialization context.</param>
 /// <param name="args">The serialization args.</param>
 /// <param name="value">The object.</param>
 protected abstract void SerializeValue(BsonSerializationContext context, BsonSerializationArgs args, TBsonValue value);
Пример #10
0
        public override void Serialize(BsonSerializationContext context, BsonSerializationArgs args, TValue value)
        {
            var writerAdapter = new BsonWriterAdapter(context.Writer);

            _wrappedSerializer.Serialize(writerAdapter, value, args.NominalType);
        }
Пример #11
0
        /// <summary>
        /// Serializes a value.
        /// </summary>
        /// <param name="context">The serialization context.</param>
        /// <param name="args">The serialization args.</param>
        /// <param name="value">The object.</param>
        protected override void SerializeValue(BsonSerializationContext context, BsonSerializationArgs args, BsonRegularExpression value)
        {
            var bsonWriter = context.Writer;

            bsonWriter.WriteRegularExpression(value);
        }
Пример #12
0
 public override void Serialize(BsonSerializationContext context, BsonSerializationArgs args, TDerivedDocument value)
 {
     args.NominalType = typeof(TRootDocument);
     _derivedDocumentSerializer.Serialize(context, args, value);
 }
 /// <summary>Serializes a value.</summary>
 /// <param name="context">The serialization context.</param>
 /// <param name="args">The serialization args.</param>
 /// <param name="value">The value.</param>
 public void Serialize(BsonSerializationContext context, BsonSerializationArgs args, object value)
 {
     BsonSerializer.Serialize(context.Writer, JsonConvert.SerializeObject(value), args: args);
 }
Пример #14
0
        /// <summary>
        /// Serializes a value.
        /// </summary>
        /// <param name="context">The serialization context.</param>
        /// <param name="args">The serialization args.</param>
        /// <param name="value">The object.</param>
        public override void Serialize(BsonSerializationContext context, BsonSerializationArgs args, DateTime value)
        {
            var bsonWriter = context.Writer;

            DateTime utcDateTime;

            if (_dateOnly)
            {
                if (value.TimeOfDay != TimeSpan.Zero)
                {
                    throw new BsonSerializationException("TimeOfDay component is not zero.");
                }
                utcDateTime = DateTime.SpecifyKind(value, DateTimeKind.Utc); // not ToLocalTime
            }
            else
            {
                utcDateTime = BsonUtils.ToUniversalTime(value);
            }
            var millisecondsSinceEpoch = BsonUtils.ToMillisecondsSinceEpoch(utcDateTime);

            switch (_representation)
            {
            case BsonType.DateTime:
                bsonWriter.WriteDateTime(millisecondsSinceEpoch);
                break;

            case BsonType.Document:
                bsonWriter.WriteStartDocument();
                bsonWriter.WriteDateTime("DateTime", millisecondsSinceEpoch);
                bsonWriter.WriteInt64("Ticks", utcDateTime.Ticks);
                bsonWriter.WriteEndDocument();
                break;

            case BsonType.Int64:
                bsonWriter.WriteInt64(utcDateTime.Ticks);
                break;

            case BsonType.String:
                if (_dateOnly)
                {
                    bsonWriter.WriteString(value.ToString("yyyy-MM-dd"));
                }
                else
                {
                    if (value == DateTime.MinValue || value == DateTime.MaxValue)
                    {
                        // serialize MinValue and MaxValue as Unspecified so we do NOT get the time zone offset
                        value = DateTime.SpecifyKind(value, DateTimeKind.Unspecified);
                    }
                    else if (value.Kind == DateTimeKind.Unspecified)
                    {
                        // serialize Unspecified as Local se we get the time zone offset
                        value = DateTime.SpecifyKind(value, DateTimeKind.Local);
                    }
                    bsonWriter.WriteString(JsonConvert.ToString(value));
                }
                break;

            default:
                var message = string.Format("'{0}' is not a valid DateTime representation.", _representation);
                throw new BsonSerializationException(message);
            }
        }
Пример #15
0
 public override void Serialize(BsonSerializationContext context, BsonSerializationArgs args,
                                Signature value) => context.Writer.WriteString(value?.ToString() ?? string.Empty);
Пример #16
0
        /// <summary>
        /// Serializes a value.
        /// </summary>
        /// <param name="context">The serialization context.</param>
        /// <param name="args">The serialization args.</param>
        /// <param name="value">The object.</param>
        protected override void SerializeValue(BsonSerializationContext context, BsonSerializationArgs args, BsonDateTime value)
        {
            var bsonWriter = context.Writer;

            bsonWriter.WriteDateTime(value.MillisecondsSinceEpoch);
        }
Пример #17
0
 public override void Serialize(BsonSerializationContext context, BsonSerializationArgs args, Guid value)
 => context.Writer.WriteString(value.ToString());
Пример #18
0
 public override void Serialize(BsonSerializationContext context, BsonSerializationArgs args, GeoHaystackSearchOptionsBuilder value)
 {
     BsonDocumentSerializer.Instance.Serialize(context, value._document);
 }
Пример #19
0
 /// <summary>
 /// Serializes a value of type {TValue}.
 /// </summary>
 /// <param name="context">The serialization context.</param>
 /// <param name="args">The serialization args.</param>
 /// <param name="value">The value.</param>
 protected virtual void SerializeValue(BsonSerializationContext context, BsonSerializationArgs args, TValue value)
 {
     throw CreateCannotBeSerializedException();
 }
 public override void Serialize(BsonSerializationContext context, BsonSerializationArgs args, SeatType value)
 {
     context.Writer.WriteInt32((int)value.Type);
 }
Пример #21
0
 public override void Serialize(BsonSerializationContext context, BsonSerializationArgs args, Id id)
 {
     UpdateIdIfNone(id);
     context.Writer.WriteObjectId(new ObjectId(id.StringId));
 }
 public override void Serialize(BsonSerializationContext context, BsonSerializationArgs args, GeoNearResult <TDocument> value)
 {
     _serializer.Serialize(context, value);
 }
Пример #23
0
        /// <summary>
        /// Serializes a value.
        /// </summary>
        /// <param name="context">The serialization context.</param>
        /// <param name="args">The serialization args.</param>
        /// <param name="value">The object.</param>
        public override void Serialize(BsonSerializationContext context, BsonSerializationArgs args, object value)
        {
            var bsonWriter = context.Writer;

            if (value == null)
            {
                bsonWriter.WriteNull();
            }
            else
            {
                var actualType = value.GetType();
                if (actualType == typeof(object))
                {
                    bsonWriter.WriteStartDocument();
                    bsonWriter.WriteEndDocument();
                }
                else
                {
                    // certain types can be written directly as BSON value
                    // if we're not at the top level document, or if we're using the JsonWriter
                    if (bsonWriter.State == BsonWriterState.Value || bsonWriter is JsonWriter)
                    {
                        switch (Type.GetTypeCode(actualType))
                        {
                        case TypeCode.Boolean:
                            bsonWriter.WriteBoolean((bool)value);
                            return;

                        case TypeCode.DateTime:
                            // TODO: is this right? will lose precision after round trip
                            var bsonDateTime = new BsonDateTime(BsonUtils.ToUniversalTime((DateTime)value));
                            bsonWriter.WriteDateTime(bsonDateTime.MillisecondsSinceEpoch);
                            return;

                        case TypeCode.Double:
                            bsonWriter.WriteDouble((double)value);
                            return;

                        case TypeCode.Int16:
                            // TODO: is this right? will change type to Int32 after round trip
                            bsonWriter.WriteInt32((short)value);
                            return;

                        case TypeCode.Int32:
                            bsonWriter.WriteInt32((int)value);
                            return;

                        case TypeCode.Int64:
                            bsonWriter.WriteInt64((long)value);
                            return;

                        case TypeCode.Object:
                            if (actualType == typeof(Guid))
                            {
                                var guid = (Guid)value;
                                var guidRepresentation = bsonWriter.Settings.GuidRepresentation;
                                var binaryData         = new BsonBinaryData(guid, guidRepresentation);
                                bsonWriter.WriteBinaryData(binaryData);
                                return;
                            }
                            if (actualType == typeof(ObjectId))
                            {
                                bsonWriter.WriteObjectId((ObjectId)value);
                                return;
                            }
                            break;

                        case TypeCode.String:
                            bsonWriter.WriteString((string)value);
                            return;
                        }
                    }

                    SerializeDiscriminatedValue(context, args, value, actualType);
                }
            }
        }
Пример #24
0
                public override void Serialize(BsonSerializationContext context, BsonSerializationArgs args, DateTime value)
                {
                    var bsonWriter = context.Writer;

                    bsonWriter.WriteString(value.ToString("yyyy-MM-dd", DateTimeFormatInfo.InvariantInfo));
                }
Пример #25
0
 public override void Serialize(BsonSerializationContext context, BsonSerializationArgs args, GroupByBuilder value)
 {
     BsonDocumentSerializer.Instance.Serialize(context, value._document);
 }
Пример #26
0
 public override void Serialize(BsonSerializationContext context, BsonSerializationArgs args, Instant value)
 {
     context.Writer.WriteDateTime(value.Ticks / NodaConstants.TicksPerMillisecond);
 }
Пример #27
0
 public override void Serialize(BsonSerializationContext context, BsonSerializationArgs args, Collection value)
 {
     BsonArraySerializer.Instance.Serialize(context, args, value.ToBsonArray());
 }
 public void Serialize(BsonSerializationContext context, BsonSerializationArgs args, ICollection <TEntity> value)
 {
     Serialize(context, args, (object)value);
 }
Пример #29
0
 public override void Serialize(BsonSerializationContext context, BsonSerializationArgs args, IndexKeysWrapper value)
 {
     value.SerializeWrappedObject(context);
 }
Пример #30
0
 void IBsonSerializer <TClass> .Serialize(BsonSerializationContext context, BsonSerializationArgs args, TClass value)
 {
     Serialize(context, args, value);
 }