Example #1
0
        internal RestRequest CreateRequest(string path, Method method, object obj)
        {
            var request = new RestRequest(path, method)
            {
                RequestFormat  = DataFormat.Json,
                JsonSerializer = serializerDeserializer
            };

            if (null == obj)
            {
                return(request);
            }
            if (Method.GET != method)
            {
                request.AddJsonBody(obj);
                #if DEBUG
                Api.DebugRequestList.Add(serializerDeserializer.Serialize(obj));
                #endif
                return(request);
            }
            var type = obj.GetType();
            foreach (var property in type.GetProperties())
            {
                var attribute = property.GetCustomAttribute <SerializeAsAttribute>(inherit: false);
                if (null == attribute)
                {
                    continue;
                }
                // don't need to bother with PatchAttribute because it only applies to Post and Put (this is Get).
                var value = property.GetValue(obj);
                if (attribute.IsRequired && null == value)
                {
                    throw new MissingRequiredFieldException <object>(type.Name, property.Name);
                }
                if (null == value)
                {
                    // early-out, don't try to use converter, don't add parameter
                    continue;
                }
                if (SerializationContractResolver.TryGetConverter(property, attribute, out var converter))
                {
                    var stringBuilder = new StringBuilder();
                    using (var stringWriter = new StringWriter(stringBuilder))
                        using (var jsonWriter = new JsonTextWriter(stringWriter))
                            converter.WriteJson(jsonWriter, value, NewtonsoftJsonSerializer.Serializer);
                    value = stringBuilder.ToString();
                }
                else if (value.GetType().IsEnum&& null != value.GetType().GetCustomAttribute <EnumNameConverterAttribute>())
                {
                    value = value.GetType().GetMember(value.ToString(), BindingFlags.Static | BindingFlags.Public).FirstOrDefault()
                            ?.GetCustomAttribute <EnumMemberAttribute>()?.Value
                            ?? value.ToString();
                }
                request.AddParameter(attribute.Key, value);
            }
            return(request);
        }
        protected virtual void ConfigureSerializationConfigurationFn()
        {
            SerializationConfigurationFn = () =>
            {
                var contractResolver = new SerializationContractResolver();

                return(new SerializationConfiguration(contractResolver));
            };
        }
        protected virtual void ConfigureSerializationConfiguration()
        {
            var config = new Lazy <SerializationConfiguration>(() =>
            {
                var contractResolver = new SerializationContractResolver();
                return(new SerializationConfiguration(contractResolver));
            });

            SerializationConfigurationFn = () => config.Value;
        }
        protected virtual void ConfigureDocumentSerializationConfigurationFn()
        {
            var serializationConfiguration = new Lazy <SerializationConfiguration>(() =>
            {
                var contractResolver = new SerializationContractResolver();

                return(new SerializationConfiguration(contractResolver));
            });

            DocumentSerializationConfigurationFn = () => serializationConfiguration.Value;
        }
Example #5
0
        private void ConfigureSerializationConfigurationFn()
        {
            var serializationConfiguration = new Lazy <SerializationConfiguration>(() =>
            {
                var contractResolver = new SerializationContractResolver();

                return(new SerializationConfiguration(contractResolver));
            });

            SerializationConfigurationFn = () => serializationConfiguration.Value;
        }