private static ControlInfoJson.DynamicPropertyJson GetDynamicPropertyEntry(ControlState state, string propName, string expression)
        {
            var property = new ControlInfoJson.DynamicPropertyJson();

            property.PropertyName = propName;

            DynamicPropertyState propState = null;

            if (state.DynamicProperties.ToDictionary(prop => prop.PropertyName).TryGetValue(propName, out propState))
            {
                // The DynamicProperties may contain items without an existing corresponding property leading to empty property variables
                if (propState.Property != null)
                {
                    property.Rule = new ControlInfoJson.RuleEntry()
                    {
                        InvariantScript  = expression,
                        Property         = propName,
                        ExtensionData    = propState.Property.ExtensionData,
                        NameMap          = propState.Property.NameMap,
                        RuleProviderType = propState.Property.RuleProviderType
                    };
                    property.ExtensionData = propState.ExtensionData;
                }
            }
            else
            {
                property.Rule = new ControlInfoJson.RuleEntry()
                {
                    InvariantScript  = expression,
                    RuleProviderType = "Unknown"
                };
            }

            return(property);
        }
        private static ControlInfoJson.DynamicPropertyJson GetDynamicPropertyEntry(ControlState state, string propName, string expression)
        {
            var property = new ControlInfoJson.DynamicPropertyJson();

            property.PropertyName = propName;

            DynamicPropertyState propState = null;

            if (state.DynamicProperties.ToDictionary(prop => prop.PropertyName).TryGetValue(propName, out propState))
            {
                property.Rule = new ControlInfoJson.RuleEntry()
                {
                    InvariantScript  = expression,
                    Property         = propName,
                    ExtensionData    = propState.Property.ExtensionData,
                    NameMap          = propState.Property.NameMap,
                    RuleProviderType = propState.Property.RuleProviderType
                };
                property.ExtensionData = propState.ExtensionData;
            }
            else
            {
                property.Rule = new ControlInfoJson.RuleEntry()
                {
                    InvariantScript  = expression,
                    RuleProviderType = "Unknown"
                };
            }

            return(property);
        }
        private static (PropertyNode prop, DynamicPropertyState state) SplitDynamicProperty(ControlInfoJson.DynamicPropertyJson dynamicProperty)
        {
            var(prop, propertyState) = SplitProperty(dynamicProperty.Rule);
            var state = new DynamicPropertyState()
            {
                PropertyName = propertyState.PropertyName, Property = propertyState, ExtensionData = dynamicProperty.ExtensionData
            };

            return(prop, state);
        }