public void ReturnDefaultSerializerByType <T>(Serializer <T> serializer, Type type)
        {
            SqlSerializerFactory factory          = new SqlSerializerFactory();
            Serializer <T>       actualSerializer = factory.GetDefaultSerializer <T>();

            Assert.Equal(actualSerializer.GetType(), type);
        }
        public void ReturnRegisteredSerializerByIdentifier(string identifier, Type expectedType)
        {
            SqlSerializerFactory factory    = new SqlSerializerFactory();
            ISerializer          serialiser = factory.GetSerializer(identifier);

            Assert.Equal(expectedType, serialiser.GetType());
        }
        public void RegisterSerializerCorrectlyWithOveridingDefault()
        {
            SqlSerializerFactory factory = new SqlSerializerFactory();

            factory.RegisterSerializer(typeof(bool), new TestSerializer(), overrideDefault: true);

            ISerializer serializer        = factory.GetSerializer("Test_Serializer");
            ISerializer defaultSerializer = factory.GetDefaultSerializer <bool>();

            Assert.Equal(serializer, defaultSerializer);
        }
Esempio n. 4
0
        private static (TypeMarker, byte[]) Serialize(JToken propertyValue)
        {
            SqlSerializerFactory sqlSerializerFactory = new SqlSerializerFactory();

            // UTF-8 Encoding
            SqlVarCharSerializer sqlVarcharSerializer = new SqlVarCharSerializer(size: -1, codePageCharacterEncoding: 65001);

            return(propertyValue.Type switch
            {
                JTokenType.Boolean => (TypeMarker.Boolean, sqlSerializerFactory.GetDefaultSerializer <bool>().Serialize(propertyValue.ToObject <bool>())),
                JTokenType.Float => (TypeMarker.Double, sqlSerializerFactory.GetDefaultSerializer <double>().Serialize(propertyValue.ToObject <double>())),
                JTokenType.Integer => (TypeMarker.Long, sqlSerializerFactory.GetDefaultSerializer <long>().Serialize(propertyValue.ToObject <long>())),
                JTokenType.String => (TypeMarker.String, sqlVarcharSerializer.Serialize(propertyValue.ToObject <string>())),
                _ => throw new InvalidOperationException($"Invalid or Unsupported Data Type Passed : {propertyValue.Type}. "),
            });
Esempio n. 5
0
        private static void DeserializeAndAddProperty(
            TypeMarker typeMarker,
            byte[] serializedBytes,
            JObject jObject,
            string key)
        {
            SqlSerializerFactory sqlSerializerFactory = new SqlSerializerFactory();

            // UTF-8 encoding.
            SqlVarcharSerializer sqlVarcharSerializer = new SqlVarcharSerializer(size: -1, codePageCharacterEncoding: 65001);

            switch (typeMarker)
            {
            case TypeMarker.Boolean:
                jObject.Add(key, sqlSerializerFactory.GetDefaultSerializer <bool>().Deserialize(serializedBytes));
                break;

            case TypeMarker.Double:
                jObject.Add(key, sqlSerializerFactory.GetDefaultSerializer <double>().Deserialize(serializedBytes));
                break;

            case TypeMarker.Long:
                jObject.Add(key, sqlSerializerFactory.GetDefaultSerializer <long>().Deserialize(serializedBytes));
                break;

            case TypeMarker.String:
                jObject.Add(key, sqlVarcharSerializer.Deserialize(serializedBytes));
                break;

            case TypeMarker.Array:
                jObject.Add(key, JsonConvert.DeserializeObject <JArray>(sqlVarcharSerializer.Deserialize(serializedBytes)));
                break;

            case TypeMarker.Object:
                jObject.Add(key, JsonConvert.DeserializeObject <JObject>(sqlVarcharSerializer.Deserialize(serializedBytes)));
                break;

            default:
                Debug.Fail(string.Format("Unexpected type marker {0}", typeMarker));
                break;
            }
        }
        public void CacheSerializerCorrectlyWhenCallingGetOrCreate()
        {
            ISerializer bigintSerializer1 = SqlSerializerFactory.GetOrCreate(typeof(SqlBigintSerializer));
            ISerializer bigintSerializer2 = SqlSerializerFactory.GetOrCreate(typeof(SqlBigintSerializer));
            ISerializer bigintSerializer3 = SqlSerializerFactory.GetOrCreate(typeof(SqlBigintSerializer), scale: 2);

            Assert.Same(bigintSerializer1, bigintSerializer2);
            Assert.NotSame(bigintSerializer1, bigintSerializer3);

            ISerializer decimalSerializer1 = SqlSerializerFactory.GetOrCreate(typeof(SqlDecimalSerializer), precision: 5, scale: 3);
            ISerializer decimalSerializer2 = SqlSerializerFactory.GetOrCreate(typeof(SqlDecimalSerializer), precision: 5, scale: 3);
            ISerializer decimalSerializer3 = SqlSerializerFactory.GetOrCreate(typeof(SqlDecimalSerializer), precision: 1, scale: 1);
            ISerializer decimalSerializer4 = SqlSerializerFactory.GetOrCreate(typeof(SqlDecimalSerializer));
            ISerializer decimalSerializer5 = SqlSerializerFactory.GetOrCreate(typeof(SqlDecimalSerializer), precision: 10, scale: 2);

            Assert.Same(decimalSerializer1, decimalSerializer2);
            Assert.Same(decimalSerializer3, decimalSerializer4);
            Assert.NotSame(decimalSerializer2, decimalSerializer3);
            Assert.NotSame(decimalSerializer4, decimalSerializer5);
            Assert.NotSame(decimalSerializer1, decimalSerializer5);
        }
Esempio n. 7
0
        private static (TypeMarker, byte[]) Serialize(JToken propertyValue)
        {
            SqlSerializerFactory sqlSerializerFactory = new SqlSerializerFactory();

            // UTF-8 encoding.
            SqlVarcharSerializer sqlVarcharSerializer = new SqlVarcharSerializer(size: -1, codePageCharacterEncoding: 65001);

            switch (propertyValue.Type)
            {
            case JTokenType.Undefined:
                Debug.Assert(false, "Undefined value cannot be in the JSON");
                return(default, null);

            case JTokenType.Null:
                Debug.Assert(false, "Null type should have been handled by caller");
                return(TypeMarker.Null, null);

            case JTokenType.Boolean:
                return(TypeMarker.Boolean, sqlSerializerFactory.GetDefaultSerializer <bool>().Serialize(propertyValue.ToObject <bool>()));

            case JTokenType.Float:
                return(TypeMarker.Double, sqlSerializerFactory.GetDefaultSerializer <double>().Serialize(propertyValue.ToObject <double>()));

            case JTokenType.Integer:
                return(TypeMarker.Long, sqlSerializerFactory.GetDefaultSerializer <long>().Serialize(propertyValue.ToObject <long>()));

            case JTokenType.String:
                return(TypeMarker.String, sqlVarcharSerializer.Serialize(propertyValue.ToObject <string>()));

            case JTokenType.Array:
                return(TypeMarker.Array, sqlVarcharSerializer.Serialize(propertyValue.ToString()));

            case JTokenType.Object:
                return(TypeMarker.Object, sqlVarcharSerializer.Serialize(propertyValue.ToString()));

            default:
                throw new InvalidOperationException($" Invalid or Unsupported Data Type Passed : {propertyValue.Type}");
            }
        }
        public void ThrowWhenRegisterSerializerWithNullSerializer()
        {
            SqlSerializerFactory factory = new SqlSerializerFactory();

            Assert.Throws <ArgumentNullException>(() => factory.RegisterSerializer(typeof(bool), null));
        }
        public void ThrowWhenRegisterSerializerWithNullType()
        {
            SqlSerializerFactory factory = new SqlSerializerFactory();

            Assert.Throws <ArgumentNullException>(() => factory.RegisterSerializer(null, new TestSerializer()));
        }
        public void ThrowWhenGettingUnregisteredDefault()
        {
            SqlSerializerFactory factory = new SqlSerializerFactory();

            Assert.Throws <NotImplementedException>(() => factory.GetDefaultSerializer <object>());
        }
        public void ShouldReturnNullWhenGettingUnregisteredSerializer()
        {
            SqlSerializerFactory factory = new SqlSerializerFactory();

            Assert.Null(factory.GetSerializer(""));
        }
        public void ThrowWhenGettingSerializerWithNulldentifier()
        {
            SqlSerializerFactory factory = new SqlSerializerFactory();

            Assert.Throws <ArgumentNullException>(() => factory.GetSerializer(null));
        }