using System.Collections.Generic;
using Newtonsoft.Json.Linq;
public static void Main()
List<Distributor> theDistributors = new List<Distributor>();
theDistributors.Add(new Distributor("test",1,1,0,0));
theDistributors.Add(new Distributor("test",2,1,1,1));
theDistributors.Add(new Distributor("test",3,1,1,1));
theDistributors.Add(new Distributor("test",4,1,2,1));
theDistributors.Add(new Distributor("test",5,1,2,1));
theDistributors.Add(new Distributor("test",6,1,3,1));
theDistributors.Add(new Distributor("test",7,1,3,1));
Distributor rootDist = theDistributors[0];
foreach(Distributor d in theDistributors)
rootDist.FindOrCreate(d);
JsonSerializerSettings settings1 = new JsonSerializerSettings();
settings1.Converters.Add(new DistributorConverter());
settings1.Formatting = Formatting.Indented;
string json1 = JsonConvert.SerializeObject(rootDist, settings1);
Console.WriteLine(json1);
public string Name { get; set; }
public int DistID { get; set;}
public int UplineDistID { get; set;}
public int BusCtrID { get; set;}
public int UplineBusCtrID { get; set;}
public Dictionary<string, Distributor> children { get; set; }
public Distributor(string name, int distID, int uplineDistID, int busCtrID, int uplineBusCtrID)
UplineDistID = uplineDistID;
UplineBusCtrID = uplineBusCtrID;
children = new Dictionary<string,Distributor>();
public Distributor FindOrCreate(Distributor d)
if(children.Contains(d.DistID))
Distributor dir = FindOrCreate(d);
return dir.FindOrCreate(d);
if(children.ContainsKey(d.DistID.ToString()))
child = children[d.DistID.ToString()];
child = new Distributor(d.Name, d.DistID, d.UplineDistID, d.BusCtrID, d.UplineBusCtrID);
children.Add(d.DistID.ToString(), child);
class DistributorConverter : JsonConverter
public override bool CanConvert(Type objectType)
return (objectType == typeof(Distributor));
public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
Distributor distributors = (Distributor)value;
JObject obj = new JObject();
foreach (var kvp in distributors.children)
obj.Add(kvp.Key, JToken.FromObject(kvp.Value, serializer));
public override bool CanRead
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
throw new NotImplementedException();