16 using Newtonsoft.Json;
17 using Newtonsoft.Json.Linq;
19 using System.Reflection;
29 public override void WriteJson(JsonWriter writer,
object value, JsonSerializer serializer)
31 JObject jo =
new JObject();
32 Type type = value.GetType();
34 foreach (PropertyInfo prop
in type.GetProperties())
38 var attribute = prop.GetCustomAttribute<JsonPropertyAttribute>();
39 object propVal = prop.GetValue(value,
null);
42 jo.Add(attribute.PropertyName ?? prop.Name, JToken.FromObject(propVal, serializer));
49 public override object ReadJson(
53 JsonSerializer serializer
56 JObject token = JObject.Load(reader);
57 var parameterName = token.GetValue(
"name", StringComparison.OrdinalIgnoreCase)?.Value<
string>();
58 if (
string.IsNullOrEmpty(parameterName))
67 if (token.TryGetValue(
"value", StringComparison.OrdinalIgnoreCase, out value))
71 else if (token.TryGetValue(
"min", StringComparison.OrdinalIgnoreCase, out minToken) &&
72 token.TryGetValue(
"max", StringComparison.OrdinalIgnoreCase, out maxToken))
74 var stepToken = token.GetValue(
"step", StringComparison.OrdinalIgnoreCase)?.Value<decimal>();
75 var minStepToken = token.GetValue(
"minStep", StringComparison.OrdinalIgnoreCase)?.Value<decimal>() ?? token.GetValue(
"min-step", StringComparison.OrdinalIgnoreCase)?.Value<decimal>();
76 if (stepToken.HasValue)
78 if (minStepToken.HasValue)
81 minToken.Value<decimal>(),
82 maxToken.Value<decimal>(),
89 minToken.Value<decimal>(),
90 maxToken.Value<decimal>(),
97 minToken.Value<decimal>(),
98 maxToken.Value<decimal>());
102 if (optimizationParameter ==
null)
107 return optimizationParameter;
110 public override bool CanConvert(Type objectType) => typeof(
OptimizationParameter).IsAssignableFrom(objectType);