/* 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