/* 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. */ using System; namespace MongoDB.Bson.Serialization.Serializers { /// /// Represents a serializer for a . /// /// The type of item 1. public class TupleSerializer : SealedClassSerializerBase> { // private fields private readonly Lazy> _lazyItem1Serializer; // constructors /// /// Initializes a new instance of the class. /// public TupleSerializer() : this(BsonSerializer.SerializerRegistry) { } /// /// Initializes a new instance of the class. /// /// The Item1 serializer. public TupleSerializer( IBsonSerializer item1Serializer) { if (item1Serializer == null) { throw new ArgumentNullException("item1Serializer"); } _lazyItem1Serializer = new Lazy>(() => item1Serializer); } /// /// Initializes a new instance of the class. /// /// The serializer registry. public TupleSerializer(IBsonSerializerRegistry serializerRegistry) { if (serializerRegistry == null) { throw new ArgumentNullException("serializerRegistry"); } _lazyItem1Serializer = new Lazy>(() => serializerRegistry.GetSerializer()); } // public properties /// /// Gets the Item1 serializer. /// public IBsonSerializer Item1Serializer { get { return _lazyItem1Serializer.Value; } } // public methods /// /// Deserializes the value. /// /// The context. /// The deserialization args. /// A deserialized value. protected override Tuple DeserializeValue(BsonDeserializationContext context, BsonDeserializationArgs args) { context.Reader.ReadStartArray(); var item1 = _lazyItem1Serializer.Value.Deserialize(context); context.Reader.ReadEndArray(); return new Tuple(item1); } /// /// Serializes the value. /// /// The serialization context. /// The serialization args. /// The value. protected override void SerializeValue(BsonSerializationContext context, BsonSerializationArgs args, Tuple value) { context.Writer.WriteStartArray(); _lazyItem1Serializer.Value.Serialize(context, value.Item1); context.Writer.WriteEndArray(); } } /// /// Represents a serializer for a . /// /// The type of item 1. /// The type of item 2. public class TupleSerializer : SealedClassSerializerBase> { // private fields private readonly Lazy> _lazyItem1Serializer; private readonly Lazy> _lazyItem2Serializer; // constructors /// /// Initializes a new instance of the class. /// public TupleSerializer() : this(BsonSerializer.SerializerRegistry) { } /// /// Initializes a new instance of the class. /// /// The Item1 serializer. /// The Item2 serializer. public TupleSerializer( IBsonSerializer item1Serializer, IBsonSerializer item2Serializer) { if (item1Serializer == null) { throw new ArgumentNullException("item1Serializer"); } if (item2Serializer == null) { throw new ArgumentNullException("item2Serializer"); } _lazyItem1Serializer = new Lazy>(() => item1Serializer); _lazyItem2Serializer = new Lazy>(() => item2Serializer); } /// /// Initializes a new instance of the class. /// /// The serializer registry. public TupleSerializer(IBsonSerializerRegistry serializerRegistry) { if (serializerRegistry == null) { throw new ArgumentNullException("serializerRegistry"); } _lazyItem1Serializer = new Lazy>(() => serializerRegistry.GetSerializer()); _lazyItem2Serializer = new Lazy>(() => serializerRegistry.GetSerializer()); } // public properties /// /// Gets the Item1 serializer. /// public IBsonSerializer Item1Serializer { get { return _lazyItem1Serializer.Value; } } /// /// Gets the Item2 serializer. /// public IBsonSerializer Item2Serializer { get { return _lazyItem2Serializer.Value; } } // public methods /// /// Deserializes the value. /// /// The context. /// The deserialization args. /// A deserialized value. protected override Tuple DeserializeValue(BsonDeserializationContext context, BsonDeserializationArgs args) { context.Reader.ReadStartArray(); var item1 = _lazyItem1Serializer.Value.Deserialize(context); var item2 = _lazyItem2Serializer.Value.Deserialize(context); context.Reader.ReadEndArray(); return new Tuple(item1, item2); } /// /// Serializes the value. /// /// The serialization context. /// The serialization args. /// The value. protected override void SerializeValue(BsonSerializationContext context, BsonSerializationArgs args, Tuple value) { context.Writer.WriteStartArray(); _lazyItem1Serializer.Value.Serialize(context, value.Item1); _lazyItem2Serializer.Value.Serialize(context, value.Item2); context.Writer.WriteEndArray(); } } /// /// Represents a serializer for a . /// /// The type of item 1. /// The type of item 2. /// The type of item 3. public class TupleSerializer : SealedClassSerializerBase> { // private fields private readonly Lazy> _lazyItem1Serializer; private readonly Lazy> _lazyItem2Serializer; private readonly Lazy> _lazyItem3Serializer; // constructors /// /// Initializes a new instance of the class. /// public TupleSerializer() : this(BsonSerializer.SerializerRegistry) { } /// /// Initializes a new instance of the class. /// /// The Item1 serializer. /// The Item2 serializer. /// The Item3 serializer. public TupleSerializer( IBsonSerializer item1Serializer, IBsonSerializer item2Serializer, IBsonSerializer item3Serializer) { if (item1Serializer == null) { throw new ArgumentNullException("item1Serializer"); } if (item2Serializer == null) { throw new ArgumentNullException("item2Serializer"); } if (item3Serializer == null) { throw new ArgumentNullException("item3Serializer"); } _lazyItem1Serializer = new Lazy>(() => item1Serializer); _lazyItem2Serializer = new Lazy>(() => item2Serializer); _lazyItem3Serializer = new Lazy>(() => item3Serializer); } /// /// Initializes a new instance of the class. /// /// The serializer registry. public TupleSerializer(IBsonSerializerRegistry serializerRegistry) { if (serializerRegistry == null) { throw new ArgumentNullException("serializerRegistry"); } _lazyItem1Serializer = new Lazy>(() => serializerRegistry.GetSerializer()); _lazyItem2Serializer = new Lazy>(() => serializerRegistry.GetSerializer()); _lazyItem3Serializer = new Lazy>(() => serializerRegistry.GetSerializer()); } // public properties /// /// Gets the Item1 serializer. /// public IBsonSerializer Item1Serializer { get { return _lazyItem1Serializer.Value; } } /// /// Gets the Item2 serializer. /// public IBsonSerializer Item2Serializer { get { return _lazyItem2Serializer.Value; } } /// /// Gets the Item3 serializer. /// public IBsonSerializer Item3Serializer { get { return _lazyItem3Serializer.Value; } } // public methods /// /// Deserializes the value. /// /// The context. /// The deserialization args. /// A deserialized value. protected override Tuple DeserializeValue(BsonDeserializationContext context, BsonDeserializationArgs args) { context.Reader.ReadStartArray(); var item1 = _lazyItem1Serializer.Value.Deserialize(context); var item2 = _lazyItem2Serializer.Value.Deserialize(context); var item3 = _lazyItem3Serializer.Value.Deserialize(context); context.Reader.ReadEndArray(); return new Tuple(item1, item2, item3); } /// /// Serializes the value. /// /// The serialization context. /// The serialization args. /// The value. protected override void SerializeValue(BsonSerializationContext context, BsonSerializationArgs args, Tuple value) { context.Writer.WriteStartArray(); _lazyItem1Serializer.Value.Serialize(context, value.Item1); _lazyItem2Serializer.Value.Serialize(context, value.Item2); _lazyItem3Serializer.Value.Serialize(context, value.Item3); context.Writer.WriteEndArray(); } } /// /// Represents a serializer for a . /// /// The type of item 1. /// The type of item 2. /// The type of item 3. /// The type of item 4. public class TupleSerializer : SealedClassSerializerBase> { // private fields private readonly Lazy> _lazyItem1Serializer; private readonly Lazy> _lazyItem2Serializer; private readonly Lazy> _lazyItem3Serializer; private readonly Lazy> _lazyItem4Serializer; // constructors /// /// Initializes a new instance of the class. /// public TupleSerializer() : this(BsonSerializer.SerializerRegistry) { } /// /// Initializes a new instance of the class. /// /// The Item1 serializer. /// The Item2 serializer. /// The Item3 serializer. /// The Item4 serializer. public TupleSerializer( IBsonSerializer item1Serializer, IBsonSerializer item2Serializer, IBsonSerializer item3Serializer, IBsonSerializer item4Serializer) { if (item1Serializer == null) { throw new ArgumentNullException("item1Serializer"); } if (item2Serializer == null) { throw new ArgumentNullException("item2Serializer"); } if (item3Serializer == null) { throw new ArgumentNullException("item3Serializer"); } if (item4Serializer == null) { throw new ArgumentNullException("item4Serializer"); } _lazyItem1Serializer = new Lazy>(() => item1Serializer); _lazyItem2Serializer = new Lazy>(() => item2Serializer); _lazyItem3Serializer = new Lazy>(() => item3Serializer); _lazyItem4Serializer = new Lazy>(() => item4Serializer); } /// /// Initializes a new instance of the class. /// /// The serializer registry. public TupleSerializer(IBsonSerializerRegistry serializerRegistry) { if (serializerRegistry == null) { throw new ArgumentNullException("serializerRegistry"); } _lazyItem1Serializer = new Lazy>(() => serializerRegistry.GetSerializer()); _lazyItem2Serializer = new Lazy>(() => serializerRegistry.GetSerializer()); _lazyItem3Serializer = new Lazy>(() => serializerRegistry.GetSerializer()); _lazyItem4Serializer = new Lazy>(() => serializerRegistry.GetSerializer()); } // public properties /// /// Gets the Item1 serializer. /// public IBsonSerializer Item1Serializer { get { return _lazyItem1Serializer.Value; } } /// /// Gets the Item2 serializer. /// public IBsonSerializer Item2Serializer { get { return _lazyItem2Serializer.Value; } } /// /// Gets the Item3 serializer. /// public IBsonSerializer Item3Serializer { get { return _lazyItem3Serializer.Value; } } /// /// Gets the Item4 serializer. /// public IBsonSerializer Item4Serializer { get { return _lazyItem4Serializer.Value; } } // public methods /// /// Deserializes the value. /// /// The context. /// The deserialization args. /// A deserialized value. protected override Tuple DeserializeValue(BsonDeserializationContext context, BsonDeserializationArgs args) { context.Reader.ReadStartArray(); var item1 = _lazyItem1Serializer.Value.Deserialize(context); var item2 = _lazyItem2Serializer.Value.Deserialize(context); var item3 = _lazyItem3Serializer.Value.Deserialize(context); var item4 = _lazyItem4Serializer.Value.Deserialize(context); context.Reader.ReadEndArray(); return new Tuple(item1, item2, item3, item4); } /// /// Serializes the value. /// /// The serialization context. /// The serialization args. /// The value. protected override void SerializeValue(BsonSerializationContext context, BsonSerializationArgs args, Tuple value) { context.Writer.WriteStartArray(); _lazyItem1Serializer.Value.Serialize(context, value.Item1); _lazyItem2Serializer.Value.Serialize(context, value.Item2); _lazyItem3Serializer.Value.Serialize(context, value.Item3); _lazyItem4Serializer.Value.Serialize(context, value.Item4); context.Writer.WriteEndArray(); } } /// /// Represents a serializer for a . /// /// The type of item 1. /// The type of item 2. /// The type of item 3. /// The type of item 4. /// The type of item 5. public class TupleSerializer : SealedClassSerializerBase> { // private fields private readonly Lazy> _lazyItem1Serializer; private readonly Lazy> _lazyItem2Serializer; private readonly Lazy> _lazyItem3Serializer; private readonly Lazy> _lazyItem4Serializer; private readonly Lazy> _lazyItem5Serializer; // constructors /// /// Initializes a new instance of the class. /// public TupleSerializer() : this(BsonSerializer.SerializerRegistry) { } /// /// Initializes a new instance of the class. /// /// The Item1 serializer. /// The Item2 serializer. /// The Item3 serializer. /// The Item4 serializer. /// The Item5 serializer. public TupleSerializer( IBsonSerializer item1Serializer, IBsonSerializer item2Serializer, IBsonSerializer item3Serializer, IBsonSerializer item4Serializer, IBsonSerializer item5Serializer) { if (item1Serializer == null) { throw new ArgumentNullException("item1Serializer"); } if (item2Serializer == null) { throw new ArgumentNullException("item2Serializer"); } if (item3Serializer == null) { throw new ArgumentNullException("item3Serializer"); } if (item4Serializer == null) { throw new ArgumentNullException("item4Serializer"); } if (item5Serializer == null) { throw new ArgumentNullException("item5Serializer"); } _lazyItem1Serializer = new Lazy>(() => item1Serializer); _lazyItem2Serializer = new Lazy>(() => item2Serializer); _lazyItem3Serializer = new Lazy>(() => item3Serializer); _lazyItem4Serializer = new Lazy>(() => item4Serializer); _lazyItem5Serializer = new Lazy>(() => item5Serializer); } /// /// Initializes a new instance of the class. /// /// The serializer registry. public TupleSerializer(IBsonSerializerRegistry serializerRegistry) { if (serializerRegistry == null) { throw new ArgumentNullException("serializerRegistry"); } _lazyItem1Serializer = new Lazy>(() => serializerRegistry.GetSerializer()); _lazyItem2Serializer = new Lazy>(() => serializerRegistry.GetSerializer()); _lazyItem3Serializer = new Lazy>(() => serializerRegistry.GetSerializer()); _lazyItem4Serializer = new Lazy>(() => serializerRegistry.GetSerializer()); _lazyItem5Serializer = new Lazy>(() => serializerRegistry.GetSerializer()); } // public properties /// /// Gets the Item1 serializer. /// public IBsonSerializer Item1Serializer { get { return _lazyItem1Serializer.Value; } } /// /// Gets the Item2 serializer. /// public IBsonSerializer Item2Serializer { get { return _lazyItem2Serializer.Value; } } /// /// Gets the Item3 serializer. /// public IBsonSerializer Item3Serializer { get { return _lazyItem3Serializer.Value; } } /// /// Gets the Item4 serializer. /// public IBsonSerializer Item4Serializer { get { return _lazyItem4Serializer.Value; } } /// /// Gets the Item5 serializer. /// public IBsonSerializer Item5Serializer { get { return _lazyItem5Serializer.Value; } } // public methods /// /// Deserializes the value. /// /// The context. /// The deserialization args. /// A deserialized value. protected override Tuple DeserializeValue(BsonDeserializationContext context, BsonDeserializationArgs args) { context.Reader.ReadStartArray(); var item1 = _lazyItem1Serializer.Value.Deserialize(context); var item2 = _lazyItem2Serializer.Value.Deserialize(context); var item3 = _lazyItem3Serializer.Value.Deserialize(context); var item4 = _lazyItem4Serializer.Value.Deserialize(context); var item5 = _lazyItem5Serializer.Value.Deserialize(context); context.Reader.ReadEndArray(); return new Tuple(item1, item2, item3, item4, item5); } /// /// Serializes the value. /// /// The serialization context. /// The serialization args. /// The value. protected override void SerializeValue(BsonSerializationContext context, BsonSerializationArgs args, Tuple value) { context.Writer.WriteStartArray(); _lazyItem1Serializer.Value.Serialize(context, value.Item1); _lazyItem2Serializer.Value.Serialize(context, value.Item2); _lazyItem3Serializer.Value.Serialize(context, value.Item3); _lazyItem4Serializer.Value.Serialize(context, value.Item4); _lazyItem5Serializer.Value.Serialize(context, value.Item5); context.Writer.WriteEndArray(); } } /// /// Represents a serializer for a . /// /// The type of item 1. /// The type of item 2. /// The type of item 3. /// The type of item 4. /// The type of item 5. /// The type of item 6. public class TupleSerializer : SealedClassSerializerBase> { // private fields private readonly Lazy> _lazyItem1Serializer; private readonly Lazy> _lazyItem2Serializer; private readonly Lazy> _lazyItem3Serializer; private readonly Lazy> _lazyItem4Serializer; private readonly Lazy> _lazyItem5Serializer; private readonly Lazy> _lazyItem6Serializer; // constructors /// /// Initializes a new instance of the class. /// public TupleSerializer() : this(BsonSerializer.SerializerRegistry) { } /// /// Initializes a new instance of the class. /// /// The Item1 serializer. /// The Item2 serializer. /// The Item3 serializer. /// The Item4 serializer. /// The Item5 serializer. /// The Item6 serializer. public TupleSerializer( IBsonSerializer item1Serializer, IBsonSerializer item2Serializer, IBsonSerializer item3Serializer, IBsonSerializer item4Serializer, IBsonSerializer item5Serializer, IBsonSerializer item6Serializer) { if (item1Serializer == null) { throw new ArgumentNullException("item1Serializer"); } if (item2Serializer == null) { throw new ArgumentNullException("item2Serializer"); } if (item3Serializer == null) { throw new ArgumentNullException("item3Serializer"); } if (item4Serializer == null) { throw new ArgumentNullException("item4Serializer"); } if (item5Serializer == null) { throw new ArgumentNullException("item5Serializer"); } if (item6Serializer == null) { throw new ArgumentNullException("item6Serializer"); } _lazyItem1Serializer = new Lazy>(() => item1Serializer); _lazyItem2Serializer = new Lazy>(() => item2Serializer); _lazyItem3Serializer = new Lazy>(() => item3Serializer); _lazyItem4Serializer = new Lazy>(() => item4Serializer); _lazyItem5Serializer = new Lazy>(() => item5Serializer); _lazyItem6Serializer = new Lazy>(() => item6Serializer); } /// /// Initializes a new instance of the class. /// /// The serializer registry. public TupleSerializer(IBsonSerializerRegistry serializerRegistry) { if (serializerRegistry == null) { throw new ArgumentNullException("serializerRegistry"); } _lazyItem1Serializer = new Lazy>(() => serializerRegistry.GetSerializer()); _lazyItem2Serializer = new Lazy>(() => serializerRegistry.GetSerializer()); _lazyItem3Serializer = new Lazy>(() => serializerRegistry.GetSerializer()); _lazyItem4Serializer = new Lazy>(() => serializerRegistry.GetSerializer()); _lazyItem5Serializer = new Lazy>(() => serializerRegistry.GetSerializer()); _lazyItem6Serializer = new Lazy>(() => serializerRegistry.GetSerializer()); } // public properties /// /// Gets the Item1 serializer. /// public IBsonSerializer Item1Serializer { get { return _lazyItem1Serializer.Value; } } /// /// Gets the Item2 serializer. /// public IBsonSerializer Item2Serializer { get { return _lazyItem2Serializer.Value; } } /// /// Gets the Item3 serializer. /// public IBsonSerializer Item3Serializer { get { return _lazyItem3Serializer.Value; } } /// /// Gets the Item4 serializer. /// public IBsonSerializer Item4Serializer { get { return _lazyItem4Serializer.Value; } } /// /// Gets the Item5 serializer. /// public IBsonSerializer Item5Serializer { get { return _lazyItem5Serializer.Value; } } /// /// Gets the Item6 serializer. /// public IBsonSerializer Item6Serializer { get { return _lazyItem6Serializer.Value; } } // public methods /// /// Deserializes the value. /// /// The context. /// The deserialization args. /// A deserialized value. protected override Tuple DeserializeValue(BsonDeserializationContext context, BsonDeserializationArgs args) { context.Reader.ReadStartArray(); var item1 = _lazyItem1Serializer.Value.Deserialize(context); var item2 = _lazyItem2Serializer.Value.Deserialize(context); var item3 = _lazyItem3Serializer.Value.Deserialize(context); var item4 = _lazyItem4Serializer.Value.Deserialize(context); var item5 = _lazyItem5Serializer.Value.Deserialize(context); var item6 = _lazyItem6Serializer.Value.Deserialize(context); context.Reader.ReadEndArray(); return new Tuple(item1, item2, item3, item4, item5, item6); } /// /// Serializes the value. /// /// The serialization context. /// The serialization args. /// The value. protected override void SerializeValue(BsonSerializationContext context, BsonSerializationArgs args, Tuple value) { context.Writer.WriteStartArray(); _lazyItem1Serializer.Value.Serialize(context, value.Item1); _lazyItem2Serializer.Value.Serialize(context, value.Item2); _lazyItem3Serializer.Value.Serialize(context, value.Item3); _lazyItem4Serializer.Value.Serialize(context, value.Item4); _lazyItem5Serializer.Value.Serialize(context, value.Item5); _lazyItem6Serializer.Value.Serialize(context, value.Item6); context.Writer.WriteEndArray(); } } /// /// Represents a serializer for a . /// /// The type of item 1. /// The type of item 2. /// The type of item 3. /// The type of item 4. /// The type of item 5. /// The type of item 6. /// The type of item 7. public class TupleSerializer : SealedClassSerializerBase> { // private fields private readonly Lazy> _lazyItem1Serializer; private readonly Lazy> _lazyItem2Serializer; private readonly Lazy> _lazyItem3Serializer; private readonly Lazy> _lazyItem4Serializer; private readonly Lazy> _lazyItem5Serializer; private readonly Lazy> _lazyItem6Serializer; private readonly Lazy> _lazyItem7Serializer; // constructors /// /// Initializes a new instance of the class. /// public TupleSerializer() : this(BsonSerializer.SerializerRegistry) { } /// /// Initializes a new instance of the class. /// /// The Item1 serializer. /// The Item2 serializer. /// The Item3 serializer. /// The Item4 serializer. /// The Item5 serializer. /// The Item6 serializer. /// The Item7 serializer. public TupleSerializer( IBsonSerializer item1Serializer, IBsonSerializer item2Serializer, IBsonSerializer item3Serializer, IBsonSerializer item4Serializer, IBsonSerializer item5Serializer, IBsonSerializer item6Serializer, IBsonSerializer item7Serializer) { if (item1Serializer == null) { throw new ArgumentNullException("item1Serializer"); } if (item2Serializer == null) { throw new ArgumentNullException("item2Serializer"); } if (item3Serializer == null) { throw new ArgumentNullException("item3Serializer"); } if (item4Serializer == null) { throw new ArgumentNullException("item4Serializer"); } if (item5Serializer == null) { throw new ArgumentNullException("item5Serializer"); } if (item6Serializer == null) { throw new ArgumentNullException("item6Serializer"); } if (item7Serializer == null) { throw new ArgumentNullException("item7Serializer"); } _lazyItem1Serializer = new Lazy>(() => item1Serializer); _lazyItem2Serializer = new Lazy>(() => item2Serializer); _lazyItem3Serializer = new Lazy>(() => item3Serializer); _lazyItem4Serializer = new Lazy>(() => item4Serializer); _lazyItem5Serializer = new Lazy>(() => item5Serializer); _lazyItem6Serializer = new Lazy>(() => item6Serializer); _lazyItem7Serializer = new Lazy>(() => item7Serializer); } /// /// Initializes a new instance of the class. /// /// The serializer registry. public TupleSerializer(IBsonSerializerRegistry serializerRegistry) { if (serializerRegistry == null) { throw new ArgumentNullException("serializerRegistry"); } _lazyItem1Serializer = new Lazy>(() => serializerRegistry.GetSerializer()); _lazyItem2Serializer = new Lazy>(() => serializerRegistry.GetSerializer()); _lazyItem3Serializer = new Lazy>(() => serializerRegistry.GetSerializer()); _lazyItem4Serializer = new Lazy>(() => serializerRegistry.GetSerializer()); _lazyItem5Serializer = new Lazy>(() => serializerRegistry.GetSerializer()); _lazyItem6Serializer = new Lazy>(() => serializerRegistry.GetSerializer()); _lazyItem7Serializer = new Lazy>(() => serializerRegistry.GetSerializer()); } // public properties /// /// Gets the Item1 serializer. /// public IBsonSerializer Item1Serializer { get { return _lazyItem1Serializer.Value; } } /// /// Gets the Item2 serializer. /// public IBsonSerializer Item2Serializer { get { return _lazyItem2Serializer.Value; } } /// /// Gets the Item3 serializer. /// public IBsonSerializer Item3Serializer { get { return _lazyItem3Serializer.Value; } } /// /// Gets the Item4 serializer. /// public IBsonSerializer Item4Serializer { get { return _lazyItem4Serializer.Value; } } /// /// Gets the Item5 serializer. /// public IBsonSerializer Item5Serializer { get { return _lazyItem5Serializer.Value; } } /// /// Gets the Item6 serializer. /// public IBsonSerializer Item6Serializer { get { return _lazyItem6Serializer.Value; } } /// /// Gets the Item7 serializer. /// public IBsonSerializer Item7Serializer { get { return _lazyItem7Serializer.Value; } } // public methods /// /// Deserializes the value. /// /// The context. /// The deserialization args. /// A deserialized value. protected override Tuple DeserializeValue(BsonDeserializationContext context, BsonDeserializationArgs args) { context.Reader.ReadStartArray(); var item1 = _lazyItem1Serializer.Value.Deserialize(context); var item2 = _lazyItem2Serializer.Value.Deserialize(context); var item3 = _lazyItem3Serializer.Value.Deserialize(context); var item4 = _lazyItem4Serializer.Value.Deserialize(context); var item5 = _lazyItem5Serializer.Value.Deserialize(context); var item6 = _lazyItem6Serializer.Value.Deserialize(context); var item7 = _lazyItem7Serializer.Value.Deserialize(context); context.Reader.ReadEndArray(); return new Tuple(item1, item2, item3, item4, item5, item6, item7); } /// /// Serializes the value. /// /// The serialization context. /// The serialization args. /// The value. protected override void SerializeValue(BsonSerializationContext context, BsonSerializationArgs args, Tuple value) { context.Writer.WriteStartArray(); _lazyItem1Serializer.Value.Serialize(context, value.Item1); _lazyItem2Serializer.Value.Serialize(context, value.Item2); _lazyItem3Serializer.Value.Serialize(context, value.Item3); _lazyItem4Serializer.Value.Serialize(context, value.Item4); _lazyItem5Serializer.Value.Serialize(context, value.Item5); _lazyItem6Serializer.Value.Serialize(context, value.Item6); _lazyItem7Serializer.Value.Serialize(context, value.Item7); context.Writer.WriteEndArray(); } } /// /// Represents a serializer for a . /// /// The type of item 1. /// The type of item 2. /// The type of item 3. /// The type of item 4. /// The type of item 5. /// The type of item 6. /// The type of item 7. /// The type of the rest item. public class TupleSerializer : SealedClassSerializerBase> { // private fields private readonly Lazy> _lazyItem1Serializer; private readonly Lazy> _lazyItem2Serializer; private readonly Lazy> _lazyItem3Serializer; private readonly Lazy> _lazyItem4Serializer; private readonly Lazy> _lazyItem5Serializer; private readonly Lazy> _lazyItem6Serializer; private readonly Lazy> _lazyItem7Serializer; private readonly Lazy> _lazyRestSerializer; // constructors /// /// Initializes a new instance of the class. /// public TupleSerializer() : this(BsonSerializer.SerializerRegistry) { } /// /// Initializes a new instance of the class. /// /// The Item1 serializer. /// The Item2 serializer. /// The Item3 serializer. /// The Item4 serializer. /// The Item5 serializer. /// The Item6 serializer. /// The Item7 serializer. /// The Rest serializer. public TupleSerializer( IBsonSerializer item1Serializer, IBsonSerializer item2Serializer, IBsonSerializer item3Serializer, IBsonSerializer item4Serializer, IBsonSerializer item5Serializer, IBsonSerializer item6Serializer, IBsonSerializer item7Serializer, IBsonSerializer restSerializer) { if (item1Serializer == null) { throw new ArgumentNullException("item1Serializer"); } if (item2Serializer == null) { throw new ArgumentNullException("item2Serializer"); } if (item3Serializer == null) { throw new ArgumentNullException("item3Serializer"); } if (item4Serializer == null) { throw new ArgumentNullException("item4Serializer"); } if (item5Serializer == null) { throw new ArgumentNullException("item5Serializer"); } if (item6Serializer == null) { throw new ArgumentNullException("item6Serializer"); } if (item7Serializer == null) { throw new ArgumentNullException("item7Serializer"); } if (restSerializer == null) { throw new ArgumentNullException("restSerializer"); } _lazyItem1Serializer = new Lazy>(() => item1Serializer); _lazyItem2Serializer = new Lazy>(() => item2Serializer); _lazyItem3Serializer = new Lazy>(() => item3Serializer); _lazyItem4Serializer = new Lazy>(() => item4Serializer); _lazyItem5Serializer = new Lazy>(() => item5Serializer); _lazyItem6Serializer = new Lazy>(() => item6Serializer); _lazyItem7Serializer = new Lazy>(() => item7Serializer); _lazyRestSerializer = new Lazy>(() => restSerializer); } /// /// Initializes a new instance of the class. /// /// The serializer registry. public TupleSerializer(IBsonSerializerRegistry serializerRegistry) { if (serializerRegistry == null) { throw new ArgumentNullException("serializerRegistry"); } _lazyItem1Serializer = new Lazy>(() => serializerRegistry.GetSerializer()); _lazyItem2Serializer = new Lazy>(() => serializerRegistry.GetSerializer()); _lazyItem3Serializer = new Lazy>(() => serializerRegistry.GetSerializer()); _lazyItem4Serializer = new Lazy>(() => serializerRegistry.GetSerializer()); _lazyItem5Serializer = new Lazy>(() => serializerRegistry.GetSerializer()); _lazyItem6Serializer = new Lazy>(() => serializerRegistry.GetSerializer()); _lazyItem7Serializer = new Lazy>(() => serializerRegistry.GetSerializer()); _lazyRestSerializer = new Lazy>(() => serializerRegistry.GetSerializer()); } // public properties /// /// Gets the Item1 serializer. /// public IBsonSerializer Item1Serializer { get { return _lazyItem1Serializer.Value; } } /// /// Gets the Item2 serializer. /// public IBsonSerializer Item2Serializer { get { return _lazyItem2Serializer.Value; } } /// /// Gets the Item3 serializer. /// public IBsonSerializer Item3Serializer { get { return _lazyItem3Serializer.Value; } } /// /// Gets the Item4 serializer. /// public IBsonSerializer Item4Serializer { get { return _lazyItem4Serializer.Value; } } /// /// Gets the Item5 serializer. /// public IBsonSerializer Item5Serializer { get { return _lazyItem5Serializer.Value; } } /// /// Gets the Item6 serializer. /// public IBsonSerializer Item6Serializer { get { return _lazyItem6Serializer.Value; } } /// /// Gets the Item7 serializer. /// public IBsonSerializer Item7Serializer { get { return _lazyItem7Serializer.Value; } } /// /// Gets the Rest serializer. /// public IBsonSerializer RestSerializer { get { return _lazyRestSerializer.Value; } } // public methods /// /// Deserializes the value. /// /// The context. /// The deserialization args. /// A deserialized value. protected override Tuple DeserializeValue(BsonDeserializationContext context, BsonDeserializationArgs args) { context.Reader.ReadStartArray(); var item1 = _lazyItem1Serializer.Value.Deserialize(context); var item2 = _lazyItem2Serializer.Value.Deserialize(context); var item3 = _lazyItem3Serializer.Value.Deserialize(context); var item4 = _lazyItem4Serializer.Value.Deserialize(context); var item5 = _lazyItem5Serializer.Value.Deserialize(context); var item6 = _lazyItem6Serializer.Value.Deserialize(context); var item7 = _lazyItem7Serializer.Value.Deserialize(context); var rest = _lazyRestSerializer.Value.Deserialize(context); context.Reader.ReadEndArray(); return new Tuple(item1, item2, item3, item4, item5, item6, item7, rest); } /// /// Serializes the value. /// /// The serialization context. /// The serialization args. /// The value. protected override void SerializeValue(BsonSerializationContext context, BsonSerializationArgs args, Tuple value) { context.Writer.WriteStartArray(); _lazyItem1Serializer.Value.Serialize(context, value.Item1); _lazyItem2Serializer.Value.Serialize(context, value.Item2); _lazyItem3Serializer.Value.Serialize(context, value.Item3); _lazyItem4Serializer.Value.Serialize(context, value.Item4); _lazyItem5Serializer.Value.Serialize(context, value.Item5); _lazyItem6Serializer.Value.Serialize(context, value.Item6); _lazyItem7Serializer.Value.Serialize(context, value.Item7); _lazyRestSerializer.Value.Serialize(context, value.Rest); context.Writer.WriteEndArray(); } } }