/// <summary> /// Builds the execute stored procedure operation. /// </summary> /// <param name="streamName">Name of the stream.</param> /// <param name="configType">The serialization configuration type identifiers.</param> /// <param name="serializationKind">The <see cref="SerializationKind"/>.</param> /// <param name="serializationFormat">The <see cref="SerializationFormat"/>.</param> /// <param name="compressionKind">The <see cref="CompressionKind"/>.</param> /// <param name="unregisteredTypeEncounteredStrategy">The <see cref="UnregisteredTypeEncounteredStrategy"/>.</param> /// <returns>Operation to execute stored procedure.</returns> public static ExecuteStoredProcedureOp BuildExecuteStoredProcedureOp( string streamName, IdentifiedType configType, SerializationKind serializationKind, SerializationFormat serializationFormat, CompressionKind compressionKind, UnregisteredTypeEncounteredStrategy unregisteredTypeEncounteredStrategy) { var sprocName = Invariant($"[{streamName}].[{nameof(GetIdAddIfNecessarySerializerRepresentation)}]"); var parameters = new List <ParameterDefinitionBase>() { new InputParameterDefinition <int>(nameof(InputParamName.ConfigTypeWithoutVersionId), Tables.TypeWithoutVersion.Id.SqlDataType, configType.IdWithoutVersion), new InputParameterDefinition <int>(nameof(InputParamName.ConfigTypeWithVersionId), Tables.TypeWithVersion.Id.SqlDataType, configType.IdWithVersion), new InputParameterDefinition <string>(nameof(InputParamName.SerializationKind), Tables.SerializerRepresentation.SerializationKind.SqlDataType, serializationKind.ToString()), new InputParameterDefinition <string>(nameof(InputParamName.SerializationFormat), Tables.SerializerRepresentation.SerializationFormat.SqlDataType, serializationFormat.ToString()), new InputParameterDefinition <string>(nameof(InputParamName.CompressionKind), Tables.SerializerRepresentation.CompressionKind.SqlDataType, compressionKind.ToString()), new InputParameterDefinition <string>(nameof(InputParamName.UnregisteredTypeEncounteredStrategy), Tables.SerializerRepresentation.SerializationKind.SqlDataType, unregisteredTypeEncounteredStrategy.ToString()), new OutputParameterDefinition <int>(nameof(OutputParamName.Id), Tables.SerializerRepresentation.Id.SqlDataType), }; var result = new ExecuteStoredProcedureOp(sprocName, parameters); return(result); }
public static T DeserializePayloadUsingSpecificFactory <T>( this DescribedSerialization describedSerialization, ISerializerFactory serializerFactory, ICompressorFactory compressorFactory, TypeMatchStrategy typeMatchStrategy = TypeMatchStrategy.NamespaceAndName, MultipleMatchStrategy multipleMatchStrategy = MultipleMatchStrategy.ThrowOnMultiple, UnregisteredTypeEncounteredStrategy unregisteredTypeEncounteredStrategy = UnregisteredTypeEncounteredStrategy.Default) { return((T)DeserializePayloadUsingSpecificFactory(describedSerialization, serializerFactory, compressorFactory, typeMatchStrategy, multipleMatchStrategy, unregisteredTypeEncounteredStrategy)); }
public static DescribedSerialization ToDescribedSerialization <T>( this T objectToPackageIntoDescribedSerialization, SerializationDescription serializationDescription, TypeMatchStrategy typeMatchStrategy = TypeMatchStrategy.NamespaceAndName, MultipleMatchStrategy multipleMatchStrategy = MultipleMatchStrategy.ThrowOnMultiple, UnregisteredTypeEncounteredStrategy unregisteredTypeEncounteredStrategy = UnregisteredTypeEncounteredStrategy.Default) { return(DomainExtensions.ToDescribedSerializationUsingSpecificFactory( objectToPackageIntoDescribedSerialization, serializationDescription, SerializerFactory.Instance, CompressorFactory.Instance, typeMatchStrategy, multipleMatchStrategy, unregisteredTypeEncounteredStrategy)); }
/// <summary> /// Initializes a new instance of the <see cref="NaosBsonSerializer"/> class. /// </summary> /// <param name="configurationType">Optional <see cref="BsonConfigurationBase"/> implementation to use; default is <see cref="NullBsonConfiguration"/>.</param> /// <param name="unregisteredTypeEncounteredStrategy">Optional strategy of what to do when encountering a type that has never been registered; DEFAULT is <see cref="UnregisteredTypeEncounteredStrategy.Throw" />.</param> public NaosBsonSerializer( Type configurationType = null, UnregisteredTypeEncounteredStrategy unregisteredTypeEncounteredStrategy = UnregisteredTypeEncounteredStrategy.Default) : base(configurationType ?? typeof(NullBsonConfiguration), unregisteredTypeEncounteredStrategy) { if (configurationType != null) { configurationType.IsSubclassOf(typeof(BsonConfigurationBase)).Named( Invariant($"Configuration type - {configurationType.FullName} - must derive from {nameof(BsonConfigurationBase)}.")).Must().BeTrue(); configurationType.HasParameterlessConstructor().Named( Invariant($"{nameof(configurationType)} must contain a default constructor to use in {nameof(NaosBsonSerializer)}.")).Must().BeTrue(); } this.bsonConfiguration = (BsonConfigurationBase)this.configuration; }
#pragma warning restore SA1401 // Fields should be private /// <summary> /// Initializes a new instance of the <see cref="SerializerBase"/> class. /// </summary> /// <param name="configurationType">Configuration type to use.</param> /// <param name="unregisteredTypeEncounteredStrategy">Optional strategy of what to do when encountering a type that has never been registered; if the type is a <see cref="IImplementNullObjectPattern" /> and value is default then <see cref="UnregisteredTypeEncounteredStrategy.Throw" /> is used.</param> protected SerializerBase( Type configurationType, UnregisteredTypeEncounteredStrategy unregisteredTypeEncounteredStrategy) { new { configurationType }.Must().NotBeNull(); this.unregisteredTypeEncounteredStrategy = (unregisteredTypeEncounteredStrategy == UnregisteredTypeEncounteredStrategy.Default && !configurationType.IsAssignableTo(typeof(IImplementNullObjectPattern))) || unregisteredTypeEncounteredStrategy == UnregisteredTypeEncounteredStrategy.Throw ? UnregisteredTypeEncounteredStrategy.Throw : UnregisteredTypeEncounteredStrategy.Attempt; this.ConfigurationType = configurationType; this.configuration = SerializationConfigurationManager.ConfigureWithReturn <SerializationConfigurationBase>(this.ConfigurationType); }
public static object DeserializePayloadUsingSpecificFactory( this DescribedSerialization describedSerialization, ISerializerFactory serializerFactory, ICompressorFactory compressorFactory, TypeMatchStrategy typeMatchStrategy = TypeMatchStrategy.NamespaceAndName, MultipleMatchStrategy multipleMatchStrategy = MultipleMatchStrategy.ThrowOnMultiple, UnregisteredTypeEncounteredStrategy unregisteredTypeEncounteredStrategy = UnregisteredTypeEncounteredStrategy.Default) { new { describedSerialization }.Must().NotBeNull(); new { serializerFactory }.Must().NotBeNull(); new { compressorFactory }.Must().NotBeNull(); var serializer = serializerFactory.BuildSerializer(describedSerialization.SerializationDescription, typeMatchStrategy, multipleMatchStrategy, unregisteredTypeEncounteredStrategy); var compressor = compressorFactory.BuildCompressor(describedSerialization.SerializationDescription.CompressionKind); var ret = describedSerialization.DeserializePayloadUsingSpecificSerializer(serializer, compressor, typeMatchStrategy, multipleMatchStrategy); return(ret); }
/// <summary> /// Initializes a new instance of the <see cref="NaosJsonSerializer"/> class. /// </summary> /// <param name="configurationType">Optional type of configuration to use; DEFAULT is none.</param> /// <param name="unregisteredTypeEncounteredStrategy">Optional strategy of what to do when encountering a type that has never been registered; DEFAULT is <see cref="UnregisteredTypeEncounteredStrategy.Throw" />.</param> /// <param name="formattingKind">Optional type of formatting to use; DEFAULT is <see cref="JsonFormattingKind.Default" />.</param> public NaosJsonSerializer( Type configurationType = null, UnregisteredTypeEncounteredStrategy unregisteredTypeEncounteredStrategy = UnregisteredTypeEncounteredStrategy.Default, JsonFormattingKind formattingKind = JsonFormattingKind.Default) : base(configurationType ?? typeof(NullJsonConfiguration), unregisteredTypeEncounteredStrategy) { new { formattingKind }.Must().NotBeEqualTo(JsonFormattingKind.Invalid); this.formattingKind = formattingKind; if (configurationType != null) { configurationType.IsSubclassOf(typeof(JsonConfigurationBase)).Named( Invariant($"Configuration type - {configurationType.FullName} - must derive from {nameof(JsonConfigurationBase)}.")).Must().BeTrue(); configurationType.HasParameterlessConstructor().Named( Invariant($"{nameof(configurationType)} must contain a default constructor to use in {nameof(NaosJsonSerializer)}.")).Must().BeTrue(); } this.jsonConfiguration = (JsonConfigurationBase)this.configuration; this.anonymousWriteSerializationSettings = this.jsonConfiguration.BuildAnonymousJsonSerializerSettings(SerializationDirection.Serialize, this.formattingKind); }
/// <summary> /// Initializes a new instance of the <see cref="NaosPropertyBagSerializer"/> class. /// </summary> /// <param name="configurationType">Type of configuration to use.</param> /// <param name="unregisteredTypeEncounteredStrategy">Optional strategy of what to do when encountering a type that has never been registered; DEFAULT is <see cref="UnregisteredTypeEncounteredStrategy.Throw" />.</param> public NaosPropertyBagSerializer(Type configurationType = null, UnregisteredTypeEncounteredStrategy unregisteredTypeEncounteredStrategy = UnregisteredTypeEncounteredStrategy.Default) : base(configurationType ?? typeof(NullPropertyBagConfiguration), unregisteredTypeEncounteredStrategy) { if (configurationType != null) { configurationType.IsSubclassOf(typeof(PropertyBagConfigurationBase)).Named( Invariant($"Configuration type - {configurationType.FullName} - must derive from {nameof(PropertyBagConfigurationBase)}.")).Must().BeTrue(); configurationType.HasParameterlessConstructor().Named( Invariant($"{nameof(configurationType)} must contain a default constructor to use in {nameof(NaosPropertyBagSerializer)}.")).Must() .BeTrue(); } this.propertyBagConfiguration = (PropertyBagConfigurationBase)this.configuration; this.dictionaryStringSerializer = new NaosDictionaryStringStringSerializer( this.propertyBagConfiguration.StringSerializationKeyValueDelimiter, this.propertyBagConfiguration.StringSerializationLineDelimiter, this.propertyBagConfiguration.StringSerializationNullValueEncoding); this.configuredTypeToSerializerMap = this.propertyBagConfiguration.BuildConfiguredTypeToSerializerMap(); this.cachedAttributeSerializerTypeToObjectMap = new Dictionary <Type, IStringSerializeAndDeserialize>(); }
public static DescribedSerialization ToDescribedSerializationUsingSpecificFactory <T>( this T objectToPackageIntoDescribedSerialization, SerializationDescription serializationDescription, ISerializerFactory serializerFactory, ICompressorFactory compressorFactory, TypeMatchStrategy typeMatchStrategy = TypeMatchStrategy.NamespaceAndName, MultipleMatchStrategy multipleMatchStrategy = MultipleMatchStrategy.ThrowOnMultiple, UnregisteredTypeEncounteredStrategy unregisteredTypeEncounteredStrategy = UnregisteredTypeEncounteredStrategy.Default) { new { serializationDescription }.Must().NotBeNull(); new { serializerFactory }.Must().NotBeNull(); new { compressorFactory }.Must().NotBeNull(); var serializer = serializerFactory.BuildSerializer(serializationDescription, typeMatchStrategy, multipleMatchStrategy, unregisteredTypeEncounteredStrategy); var compressor = compressorFactory.BuildCompressor(serializationDescription.CompressionKind); var ret = objectToPackageIntoDescribedSerialization.ToDescribedSerializationUsingSpecificSerializer( serializationDescription, serializer, compressor); return(ret); }
public static T DeserializePayload <T>(this DescribedSerialization describedSerialization, TypeMatchStrategy typeMatchStrategy = TypeMatchStrategy.NamespaceAndName, MultipleMatchStrategy multipleMatchStrategy = MultipleMatchStrategy.ThrowOnMultiple, UnregisteredTypeEncounteredStrategy unregisteredTypeEncounteredStrategy = UnregisteredTypeEncounteredStrategy.Default) { return(DomainExtensions.DeserializePayloadUsingSpecificFactory <T>( describedSerialization, SerializerFactory.Instance, CompressorFactory.Instance, typeMatchStrategy, multipleMatchStrategy, unregisteredTypeEncounteredStrategy)); }
/// <inheritdoc /> public ISerializeAndDeserialize BuildSerializer(SerializationDescription serializationDescription, TypeMatchStrategy typeMatchStrategy = TypeMatchStrategy.NamespaceAndName, MultipleMatchStrategy multipleMatchStrategy = MultipleMatchStrategy.ThrowOnMultiple, UnregisteredTypeEncounteredStrategy unregisteredTypeEncounteredStrategy = UnregisteredTypeEncounteredStrategy.Default) { new { serializationDescription }.Must().NotBeNull(); if (serializationDescription != this.supportedSerializationDescription) { throw new NotSupportedException(Invariant($"Supplied '{nameof(serializationDescription)}' ({serializationDescription}) does not match '{nameof(this.supportedSerializationDescription)}' ({this.supportedSerializationDescription}).")); } return(this.serializer); }
/// <inheritdoc /> public ISerializeAndDeserialize BuildSerializer(SerializationDescription serializationDescription, TypeMatchStrategy typeMatchStrategy = TypeMatchStrategy.NamespaceAndName, MultipleMatchStrategy multipleMatchStrategy = MultipleMatchStrategy.ThrowOnMultiple, UnregisteredTypeEncounteredStrategy unregisteredTypeEncounteredStrategy = UnregisteredTypeEncounteredStrategy.Default) { new { serializationDescription }.Must().NotBeNull(); lock (this.sync) { var configurationType = serializationDescription.ConfigurationTypeRepresentation?.ResolveFromLoadedTypes(typeMatchStrategy, multipleMatchStrategy); switch (serializationDescription.SerializationKind) { case SerializationKind.Json: return(new NaosJsonSerializer(configurationType, unregisteredTypeEncounteredStrategy)); default: throw new NotSupportedException(Invariant($"{nameof(serializationDescription)} from enumeration {nameof(SerializationKind)} of {serializationDescription.SerializationKind} is not supported.")); } } }
public static void RoundtripSerializeWithCallback <T>( this T expected, RoundtripSerializationCallback <T> validationCallback, Type jsonConfigType = null, Type bsonConfigType = null, Type propBagConfigType = null, UnregisteredTypeEncounteredStrategy unregisteredTypeEncounteredStrategy = UnregisteredTypeEncounteredStrategy.Default, bool testBson = true, bool testJson = true, bool testPropBag = false) { new { validationCallback }.Must().NotBeNull(); var serializers = new List <ISerializeAndDeserialize>(); if (testJson) { var jsonSerializer = new NaosJsonSerializer(jsonConfigType, unregisteredTypeEncounteredStrategy); serializers.Add(jsonSerializer); } if (testBson) { var bsonSerializer = new NaosBsonSerializer(bsonConfigType, unregisteredTypeEncounteredStrategy); serializers.Add(bsonSerializer); } if (testPropBag) { var propBagSerializer = new NaosPropertyBagSerializer(propBagConfigType, unregisteredTypeEncounteredStrategy); serializers.Add(propBagSerializer); } if (!serializers.Any()) { throw new InvalidOperationException("No serializers are being tested."); } foreach (var serializer in serializers) { var configurationTypeRepresentation = serializer.ConfigurationType.ToRepresentation(); var stringDescription = new SerializationDescription( serializer.Kind, SerializationFormat.String, configurationTypeRepresentation); var binaryDescription = new SerializationDescription( serializer.Kind, SerializationFormat.Binary, configurationTypeRepresentation); var actualString = expected.ToDescribedSerializationUsingSpecificSerializer(stringDescription, serializer); var actualBinary = expected.ToDescribedSerializationUsingSpecificSerializer(binaryDescription, serializer); var actualFromString = actualString.DeserializePayloadUsingSpecificSerializer(serializer); var actualFromBinary = actualBinary.DeserializePayloadUsingSpecificSerializer(serializer); try { validationCallback(actualString, (T)actualFromString); } catch (Exception ex) { throw new NaosSerializationException(Invariant($"Failure confirming from string with {nameof(serializer)} - {serializer.GetType()} - {actualFromString}"), ex); } try { validationCallback(actualBinary, (T)actualFromBinary); } catch (Exception ex) { throw new NaosSerializationException(Invariant($"Failure confirming from binary with {nameof(serializer)} - {serializer.GetType()} - {actualFromBinary}"), ex); } } }