/// <summary> /// Configures the ServiceStack.Text json serializer. /// </summary> /// <param name="serializer">The individual serializer to configure.</param> /// <exception cref="MemberAccessException"> /// Unable to find the deserializer property or field member on the ServiceStack.Text serializer. /// </exception> public static void ConfigureSerializer <T>(this IServiceStackSerializer <T> serializer) { if (serializer == null) { //nothing to do return; } //JsConfig is not thread safe. lock (Mutex) { if (serializer.UseRawSerializer) { JsConfig <T> .RawSerializeFn = serializer.Serialize; JsConfigWrapper <T> .SetRawDeserializerMember(serializer.Deserialize); } else { JsConfig <T> .SerializeFn = serializer.Serialize; JsConfigWrapper <T> .SetDeserializerMember(serializer.Deserialize); } var type = typeof(T); if (type.GetTypeInfo().IsValueType) { //register nullable var genericMethod = NullableSerializerMethodInfo.MakeGenericMethod(type); genericMethod.Invoke(serializer, new object[] { serializer }); } } }
private void AssertRawSerializeAndDeserializeFunctions <T>(IServiceStackSerializer <T> serializer) { Func <T, string> serializationFunc = serializer.Serialize; Func <string, T> deserializationFunc = serializer.Deserialize; Assert.Same(JsConfig <T> .RawSerializeFn.Target, serializationFunc.Target); Assert.Same(GetRawDeserializerTarget <T>(), deserializationFunc.Target); }
/// <summary> /// Creates an instance of the <see cref="ExtendedIsoIntervalSerializer"/> /// </summary> /// <param name="instantSerializer">The <see cref="Instant"/> serializer to use.</param> public ExtendedIsoIntervalSerializer(IServiceStackSerializer <Instant> instantSerializer) { if (instantSerializer == null) { throw new ArgumentNullException("instantSerializer"); } this._instantSerializer = instantSerializer; }
/// <summary> /// Creates a new instance of an <see cref="Interval"/> serializer that uses a complex JSON representation. /// </summary> /// <param name="instantSerializer">The serializer to use to parse and format the start and /// end <see cref="Instant"/>.</param> public ComplexJsonIntervalSerializer(IServiceStackSerializer <Instant> instantSerializer) { if (instantSerializer == null) { throw new ArgumentNullException(nameof(instantSerializer)); } this._instantSerializer = instantSerializer; }
private static void AssertConversions <T>(T value, string expectedJson, IServiceStackSerializer <T> serializer) { var actualJson = serializer.Serialize(value); Assert.Equal(expectedJson, actualJson); var deserializedValue = serializer.Deserialize(expectedJson); Assert.Equal(value, deserializedValue); }
private static void ConfigureNullableSerializer <T>(this IServiceStackSerializer <T> serializer) where T : struct { //ServiceStack.Text will never use the serialize / deserialize fn if the value is null //or the text is null or empty. if (serializer.UseRawSerializer) { JsConfig <T?> .RawSerializeFn = arg => serializer.Serialize(arg.Value); JsConfigWrapper <T?> .SetRawDeserializerMember(s => serializer.Deserialize(s)); } else { JsConfig <T?> .SerializeFn = arg => serializer.Serialize(arg.Value); JsConfigWrapper <T?> .SetDeserializerMember(s => serializer.Deserialize(s)); } }
public static void ConfigureSerializer(IServiceStackSerializer <LocalDate> serializer) { JsConfig <LocalDate> .SerializeFn = args => { var serialized = serializer.Serialize(args); return(serialized); }; JsConfig <LocalDate> .DeSerializeFn = args => { var deserialized = serializer.Deserialize(args); return(deserialized); }; JsConfig <LocalDate?> .SerializeFn = arg => { var serializedValue = serializer.Serialize(arg.Value); return(serializedValue); }; JsConfig <LocalDate?> .DeSerializeFn = s => { var deserializedValue = serializer.Deserialize(s); return(deserializedValue); }; }
public void ConfigureSerializer_Nullserializer_NoException() { IServiceStackSerializer <LocalDate> serializer = null; Assert.DoesNotThrow(serializer.ConfigureSerializer); }
public void ConfigureSerializer_Nullserializer_NoException() { IServiceStackSerializer <LocalDate> serializer = null; serializer.ConfigureSerializer(); }