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