Ejemplo n.º 1
0
                /// <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));
 }
Ejemplo n.º 3
0
 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;
        }
Ejemplo n.º 5
0
#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);
        }
Ejemplo n.º 7
0
        /// <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);
        }
Ejemplo n.º 10
0
 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."));
                }
            }
        }
Ejemplo n.º 13
0
        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);
                }
            }
        }