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); }
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}. "), });
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); }
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)); }