| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798 |
- /* Copyright 2010-present MongoDB Inc.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
- namespace MongoDB.Bson.Serialization.Serializers
- {
- /// <summary>
- /// Represents a serializer for BsonBinaryDatas.
- /// </summary>
- public class BsonBinaryDataSerializer : BsonValueSerializerBase<BsonBinaryData>
- {
- // private static fields
- private static BsonBinaryDataSerializer __instance = new BsonBinaryDataSerializer();
- // constructors
- /// <summary>
- /// Initializes a new instance of the BsonBinaryDataSerializer class.
- /// </summary>
- public BsonBinaryDataSerializer()
- : base(BsonType.Binary)
- {
- }
- // public static properties
- /// <summary>
- /// Gets an instance of the BsonBinaryDataSerializer class.
- /// </summary>
- public static BsonBinaryDataSerializer Instance
- {
- get { return __instance; }
- }
- // protected 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>
- protected override BsonBinaryData DeserializeValue(BsonDeserializationContext context, BsonDeserializationArgs args)
- {
- var bsonReader = context.Reader;
- return bsonReader.ReadBinaryData();
- }
- /// <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, BsonBinaryData value)
- {
- var bsonWriter = context.Writer;
- var subType = value.SubType;
- if (subType == BsonBinarySubType.UuidStandard || subType == BsonBinarySubType.UuidLegacy)
- {
- var writerGuidRepresentation = bsonWriter.Settings.GuidRepresentation;
- if (writerGuidRepresentation != GuidRepresentation.Unspecified)
- {
- var bytes = value.Bytes;
- var guidRepresentation = value.GuidRepresentation;
- if (guidRepresentation == GuidRepresentation.Unspecified)
- {
- var message = string.Format(
- "Cannot serialize BsonBinaryData with GuidRepresentation Unspecified to destination with GuidRepresentation {0}.",
- writerGuidRepresentation);
- throw new BsonSerializationException(message);
- }
- if (guidRepresentation != writerGuidRepresentation)
- {
- var guid = GuidConverter.FromBytes(bytes, guidRepresentation);
- bytes = GuidConverter.ToBytes(guid, writerGuidRepresentation);
- subType = (writerGuidRepresentation == GuidRepresentation.Standard) ? BsonBinarySubType.UuidStandard : BsonBinarySubType.UuidLegacy;
- guidRepresentation = writerGuidRepresentation;
- value = new BsonBinaryData(bytes, subType, guidRepresentation);
- }
- }
- }
- bsonWriter.WriteBinaryData(value);
- }
- }
- }
|