using System.Collections.Generic;
public static void Main()
List<Settings> processedList = new List<Settings>();
var jsonExample= "[\r\n{\r\n \"Domains\": [\r\n \"domain1.com\"\r\n ],\r\n \"Type\": \"imap\",\r\n \"Hostname\": \"mail.altechauto.com\",\r\n \"Port\": \"993\",\r\n \"SocketType\": \"SSL\",\r\n \"UserName\": \"%EMAILADDRESS%\"\r\n },\r\n {\r\n \"Domains\": [\r\n \"domain2.com\"\r\n ],\r\n \"Type\": \"imap\",\r\n \"Hostname\": \"mail.altechauto.com\",\r\n \"Port\": \"993\",\r\n \"SocketType\": \"SSL\",\r\n \"UserName\": \"%EMAILADDRESS%\"\r\n }]";
var deserealizedClasses = System.Text.Json.JsonSerializer.Deserialize<List<Settings>>(jsonExample);
foreach (var keySetting in deserealizedClasses.GroupBy(settingForGroup => settingForGroup.Hostname))
var defSettings = keySetting.FirstOrDefault();
Settings newRow = new Settings()
Hostname = keySetting.Key,
Domains = new List<string>(),
Port = defSettings?.Port,
SocketType = defSettings?.SocketType,
Type = defSettings?.Type,
UserName = defSettings?.UserName
foreach (var settingRow in keySetting)
foreach (var domain in settingRow?.Domains)
if(newRow.Domains.Contains(domain)) continue;
newRow.Domains.Add(domain);
processedList.Add(newRow);
Console.WriteLine(System.Text.Json.JsonSerializer.Serialize(processedList));
public List<string> Domains { get; set; }
public string Type { get; set; }
public string Hostname { get; set; }
public string Port { get; set; }
public string SocketType { get; set; }
public string UserName { get; set; }