public void FromJson(JObject jRoot)
        {
            JToken collectorsToken = jRoot.SelectToken("properties.desired.windows." + SectionName);

            if (collectorsToken == null || !(collectorsToken is JObject))
            {
                return;
            }
            JObject collectorsObject = (JObject)collectorsToken;

            List <CollectorDesiredState> collectors = new List <CollectorDesiredState>();

            foreach (JProperty property in collectorsObject.Children())
            {
                if (property.Name == "?")
                {
                    if (property.Value is JValue && property.Value.Type == JTokenType.String)
                    {
                        switch ((string)property.Value)
                        {
                        case JsonDetailed:
                            NonDeviceTwinCollectors.SelectedIndex = 0;
                            break;

                        case JsonMinimal:
                            NonDeviceTwinCollectors.SelectedIndex = 1;
                            break;

                        case JsonNone:
                            NonDeviceTwinCollectors.SelectedIndex = 2;
                            break;
                        }
                    }
                }
                else
                {
                    CollectorDesiredState collectorDesiredState = CollectorDesiredState.FromJson(property.Name, property.Value);
                    if (collectorDesiredState != null)
                    {
                        collectors.Add(collectorDesiredState);
                    }
                }
            }
            CollectorsConfigurations = collectors;
        }
        public static CollectorDesiredState FromJson(string collectorName, JToken jValueToken)
        {
            if (!(jValueToken is JObject))
            {
                return(null);
            }
            JObject jValueObject = (JObject)jValueToken;

            CollectorDesiredState collectorDesiredState = new CollectorDesiredState();

            collectorDesiredState.Name             = collectorName;
            collectorDesiredState.ReportProperties = Utils.GetString(jValueObject, "reportProperties", "yes");
            JToken jApplyProperties = Utils.GetJToken(jValueObject, "applyProperties");

            if (jApplyProperties is JValue)
            {
                collectorDesiredState.ApplyProperties = (string)jApplyProperties;
            }
            else if (jApplyProperties is JObject)
            {
                collectorDesiredState.ApplyProperties = "yes";

                JObject jApplyPropertiesObject = (JObject)jApplyProperties;
                foreach (JToken token in jApplyPropertiesObject.Children())
                {
                    if (!(token is JProperty))
                    {
                        continue;
                    }
                    JProperty jProperty = (JProperty)token;

                    switch (jProperty.Name)
                    {
                    case "traceLogFileMode":
                        collectorDesiredState.TraceLogFileMode = (string)jProperty.Value;
                        break;

                    case "logFileSizeLimitMB":
                        collectorDesiredState.LogFileSizeLimitMB = (int)jProperty.Value;
                        break;

                    case "logFileFolder":
                        collectorDesiredState.LogFileFolder = (string)jProperty.Value;
                        break;

                    case "logFileName":
                        collectorDesiredState.LogFileName = (string)jProperty.Value;
                        break;

                    case "started":
                        collectorDesiredState.Started = (string)jProperty.Value;
                        break;

                    default:
                        ProviderDesiredState providerDesiredState = ProviderDesiredState.ProviderDesiredStateFromJson(jProperty.Name, jProperty.Value);
                        if (providerDesiredState != null)
                        {
                            if (collectorDesiredState.ProviderList == null)
                            {
                                collectorDesiredState.ProviderList = new List <ProviderDesiredState>();
                            }
                            collectorDesiredState.ProviderList.Add(providerDesiredState);
                        }
                        break;
                    }
                }
            }

            return(collectorDesiredState);
        }