/// <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);
        }
コード例 #3
0
 /// <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;
 }
コード例 #5
0
        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);
        }
コード例 #9
0
        public void ConfigureSerializer_Nullserializer_NoException()
        {
            IServiceStackSerializer <LocalDate> serializer = null;

            serializer.ConfigureSerializer();
        }