public SerializeTypeInfo(ImmutablePropertyInfo idProperty, ImmutablePropertyInfo[] properties,
                                     Dictionary <string, string> refProperties,
                                     Dictionary <string, PushInfo[]> pushes,
                                     System.Reflection.ConstructorInfo constructor)
            {
                this.IdProperty       = idProperty;
                this.Properties       = properties;
                this.Properties_Wo_Id = properties.Where(property => property != idProperty).ToArray();
                this.RefProperties    = refProperties;
                this.Pushes           = pushes;
                this.Constructor      = constructor;

                if (constructor != null)
                {
                    var parameters = constructor.GetParameters();

                    this.Parameters = parameters
                                      .Select(parameter =>
                    {
                        var pName = ToUpper(parameter.Name);
                        return(new SerializeParameterInfo(pName, parameter.ParameterType,
                                                          IdProperty?.Name == pName, refProperties.Find(pName), pushes.Find(pName)));
                    }
                                              )
                                      .ToArray();
                    this.ParameterIndexByName =
                        this.Parameters.Select((p, i) => new { p.Name, i })
                        .ToDictionary(pair => pair.Name, pair => pair.i);

                    this.Construct = constructor.ToFunc(parameters);
                }
                //if (idProperty != null && idProperty.Field != null && idProperty.Field.DeclaringType == typeof(Planet))
                //{
                //  Construct = values => new Planet((long)values[0], (int)values[1], (int)values[2], (int)values[3], (int)values[4], (int)values[5], (int)values[6]);
                //}
            }