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]); //} }