public NormalizationApiModel(NormalizationApiModel copyFrom) : base(copyFrom)
        {
            if (copyFrom == null) return;

            Description = copyFrom.Description;
            Discriminator = copyFrom.Discriminator;
            Name = copyFrom.Name;
            ResourceName = copyFrom.ResourceName;
            ResourcePath = copyFrom.ResourcePath;

            Properties.AddRange(copyFrom.Properties);

            SubTypes.AddRange(copyFrom.SubTypes);
        }
        public NormalizationApiModel(NormalizationApiModel copyFrom) : base(copyFrom)
        {
            if (copyFrom == null)
            {
                return;
            }

            Description   = copyFrom.Description;
            Discriminator = copyFrom.Discriminator;
            Name          = copyFrom.Name;
            ResourceName  = copyFrom.ResourceName;
            ResourcePath  = copyFrom.ResourcePath;

            Properties.AddRange(copyFrom.Properties);

            SubTypes.AddRange(copyFrom.SubTypes);
        }
        private NormalizationApiModel ParseModelData(dynamic item)
        {
            var apiVersion = (string) item.ApiVersion;
            var resourceName = (string) item.ResourceName;
            var resourcePath = (string) item.ResourcePath;
            dynamic model = item.Model;

            var normModel = new NormalizationApiModel
            {
                ApiVersion = apiVersion,
                Name = (string) model.id,
                ResourceName = resourceName,
                ResourcePath = resourcePath
            };

            if (model.ContainsKey("subTypes"))
            {
                foreach (var sto in model.subTypes)
                {
                    if (sto == null) continue;
                    var st = (string) sto;
                    if (string.IsNullOrWhiteSpace(st)) continue;

                    normModel.RawSubTypes.Add(st);
                }
            }

            if (model.ContainsKey("description") && !string.IsNullOrWhiteSpace((string) model.description))
            {
                normModel.Description = (string) model.description;
            }

            var requiredProperties = ParseRequiredProperties(model);

            foreach (NormalizationApiModelProperty prop in ParseProperties(model))
            {
                prop.ApiVersion = apiVersion;

                if (requiredProperties.Contains(prop.Name))
                {
                    prop.IsRequired = true;
                }
                normModel.Properties.Add(prop);
            }

            return normModel;
        }