using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace SWP.Core.Configurations.Common { using Newtonsoft.Json.Linq; using System.Collections.Generic; public static class KeyValueToJson { public static JObject Convert(IEnumerable> pairs) { var root = new JObject(); foreach (var pair in pairs) { var keys = pair.Key.Split(':'); var current = root; // Gennemgå hierarkiet og opret underobjekter, hvis de ikke eksisterer for (int i = 0; i < keys.Length - 1; i++) { var key = keys[i]; if (current[key] == null) current[key] = new JObject(); current = (JObject)current[key]; } // Håndter den sidste nøgle og tilføj værdien var lastKey = keys[keys.Length - 1]; var value = ConvertValue(pair.Value); // Hvis den sidste nøgle allerede eksisterer, tilføj til en liste if (current[lastKey] != null) // Hvis den allerede er en liste, tilføj til listen if (current[lastKey].Type == JTokenType.Array) ((JArray)current[lastKey]).Add(value); // Hvis den ikke er en liste, konverter til en liste else { var existingValue = current[lastKey]; current[lastKey] = new JArray { existingValue, value }; } // Ellers tilføj som en enkelt værdi else current[lastKey] = value; } return root; } private static JToken ConvertValue(object value) { // Hvis værdien allerede er en JToken, returner den direkte if (value is JToken token) return token; // Konverter andre typer return value switch { int i => new JValue(i), double d => new JValue(d), bool b => new JValue(b), string s => new JValue(s), _ => new JValue(value.ToString()) }; } } }