[BUG] SerializeGraph does not include TaggedEdge data
See original GitHub issueDescribe the bug Serializing a graph to GraphML, discards TaggedEdge data.
To Reproduce Steps to reproduce the behavior:
- Make a graph (I tested with BidirectionalGraph)
- Use TaggedEdge
- Use graph.SerializeToGraphML
- See that the graphml does not have the edge data
Expected behavior Edge data to be included in the graphml as specified here: http://graphml.graphdrawing.org/primer/graphml-primer.html#AttributesDefinition
Additional context Example code to reproduce this problem
Example code:
using System;
using System.Xml;
using QuikGraph;
using QuikGraph.Serialization;
using System.Xml.Serialization;
using System.IO;
namespace Test {
public class Test {
public static void Main() {
var graph = new BidirectionalGraph<Node, TaggedEdge<Node, EdgeData>>();
Node node1 = new Node(1, 2);
Node node2 = new Node(1, 3);
graph.AddVertex(node1);
graph.AddVertex(node2);
graph.AddEdge(new TaggedEdge<Node, EdgeData>(node1, node2, new EdgeData(1)));
Save(graph);
}
private static void Save(BidirectionalGraph<Node, TaggedEdge<Node, EdgeData>> graph) {
XmlWriterSettings xmlWriterSettings = new XmlWriterSettings();
xmlWriterSettings.NewLineOnAttributes = true;
xmlWriterSettings.Indent = true;
var sw = new StringWriter();
XmlWriter writer = XmlWriter.Create(sw, xmlWriterSettings);
graph.SerializeToGraphML<Node, TaggedEdge<Node, EdgeData>,
BidirectionalGraph<Node, TaggedEdge<Node, EdgeData>>>(writer);
writer.Close();
Console.Write(sw.ToString());
}
}
public class EdgeData {
[XmlAttribute("weight")]
public float weight { get; set; }
public EdgeData(float weight) {
this.weight = weight;
}
}
public class Node {
[XmlAttribute("x")]
public float x { get; set; }
[XmlAttribute("y")]
public float y { get; set; }
public Node(float x, float y) {
this.x = x;
this.y = y;
}
}
}
This code will print out:
<?xml version="1.0" encoding="utf-16"?>
<graphml xmlns="http://graphml.graphdrawing.org/xmlns">
<key
id="x"
for="node"
attr.name="x"
attr.type="float" />
<key
id="y"
for="node"
attr.name="y"
attr.type="float" />
<graph
id="G"
edgedefault="directed"
parse.nodes="2"
parse.edges="1"
parse.order="nodesfirst"
parse.nodeids="free"
parse.edgeids="free">
<node
id="0">
<data
key="x">1</data>
<data
key="y">2</data>
</node>
<node
id="1">
<data
key="x">1</data>
<data
key="y">3</data>
</node>
<edge
id="0"
source="0"
target="1" />
</graph>
</graphml>
See that this holds vertex data, but no edge data.
Issue Analytics
- State:
- Created 2 years ago
- Comments:5 (3 by maintainers)
Top Results From Across the Web
Issues · KeRNeLith/QuikGraph
Generic Graph Data Structures and Algorithms for . ... [Bug] EdgeDepthFirstSearchAlgorithm does not find multiple paths when the root vertex has multiple ...
Read more >How to serialize additional edge information in QuickGraph?
To solve this problem, I created my own edge implementation pretty similar to the TaggedEdge mentioned above: public class DataEdge<TVertex> ...
Read more >The quikgraph from KeRNeLith - Coder Social
[BUG] SerializeGraph does not include TaggedEdge data. Describe the bug. Serializing a graph to GraphML, discards TaggedEdge data. To Reproduce
Read more >
Top Related Medium Post
No results found
Top Related StackOverflow Question
No results found
Troubleshoot Live Code
Lightrun enables developers to add logs, metrics and snapshots to live code - no restarts or redeploys required.
Start Free
Top Related Reddit Thread
No results found
Top Related Hackernoon Post
No results found
Top Related Tweet
No results found
Top Related Dev.to Post
No results found
Top Related Hashnode Post
No results found
So I dug a bit in the code related to the GraphML serializer and the problem you’re facing is because the serializer indeed not takes into account properties of unsupported types (types specified by the GraphML documentation) and also is limited to properties directly declared in the Edge type you are using. This means that
Of course it would be better to have both working. I will try to add support of this. Note that if you have some start of work on the subject feel free to suggest it.
@KeRNeLith yeah that should not be too much of a problem for me. Appreciate your help and effort on this project 😃