in dotnet/Utils/DirectedGraph.cs [209:248]
public void WriteJson(JsonWriter jWriter, Dictionary<TNode, int> nodeNumberer, IEnumerable<Action<JsonWriter, Dictionary<TNode, int>>> additionalWriters)
{
// Group by edge type
var edgesByType = new Dictionary<TEdgeLabel, List<(TNode From, TNode To)>>();
foreach (var edge in Nodes.SelectMany(n => GetOutEdges(n)))
{
if (!edgesByType.TryGetValue(edge.Label, out var edgeList))
{
edgeList = new List<(TNode from, TNode to)>();
edgesByType.Add(edge.Label, edgeList);
}
edgeList.Add((edge.Source, edge.Target));
}
jWriter.WriteStartObject();
jWriter.WritePropertyName("Edges");
jWriter.WriteStartObject();
foreach (var (edgeType, edges) in edgesByType)
{
jWriter.WritePropertyName(edgeType.ToString());
jWriter.WriteStartArray();
foreach (var (From, To) in edges)
{
jWriter.WriteStartArray();
WriteNodeJson(jWriter, nodeNumberer, From);
WriteNodeJson(jWriter, nodeNumberer, To);
jWriter.WriteEndArray();
}
jWriter.WriteEndArray();
}
jWriter.WriteEndObject();
foreach (var additionalWriter in additionalWriters)
{
additionalWriter(jWriter, nodeNumberer);
}
jWriter.WriteEndObject();
}