static Parameter SerializeParameter(Randomization.Parameters.Parameter parameter)
        {
            var parameterData = new Parameter();
            var fields        = parameter.GetType().GetFields();

            foreach (var field in fields)
            {
                if (field.FieldType.IsAssignableFrom(typeof(ISampler)))
                {
                    var sampler     = (ISampler)field.GetValue(parameter);
                    var samplerData = SerializeSampler(sampler);
                    if (samplerData.defaultSampler == null)
                    {
                        continue;
                    }
                    parameterData.items.Add(field.Name, samplerData);
                }
                else
                {
                    var scalarValue = ScalarFromField(field, parameter);
                    if (scalarValue != null)
                    {
                        parameterData.items.Add(field.Name, new Scalar {
                            value = scalarValue
                        });
                    }
                }
            }
            return(parameterData);
        }
 static void DeserializeParameter(Randomization.Parameters.Parameter parameter, Parameter parameterData)
 {
     foreach (var pair in parameterData.items)
     {
         var field = parameter.GetType().GetField(pair.Key);
         if (field == null)
         {
             continue;
         }
         if (pair.Value is SamplerOptions samplerOptions)
         {
             field.SetValue(parameter, DeserializeSampler(samplerOptions.defaultSampler));
         }
         else
         {
             DeserializeScalarValue(parameter, field, (Scalar)pair.Value);
         }
     }
 }