我一直在寻找这个,但找不到任何东西。
我正在尝试使用 C# 中的 Quickgraph 从 GraphML 反序列化图形。这是我用来表示顶点和边的类
[Serializable]
public class Room
{
public Room(int id, double x, double y)
{
this.Ids = id;
this.x = x;
this.y = y;
}
[XmlAttribute("id")]
public int Ids { get; set; }
[XmlAttribute]
public double x { get; set; }
[XmlAttribute]
public double y { get; set; }
}
[Serializable]
public class HouseEdge<TVertex> : Edge<TVertex>
{
public string Name { get; set; }
public HouseEdge(TVertex source, TVertex target)
: base(source, target)
{
}
}
我正在尝试使用 DeserializeFromGraphML 方法反序列化代码:
XmlReader xreader = getXMLReader("//house.xml");
IdentifiableVertexFactory<Room> ivf = new IdentifiableVertexFactory<Room>(makeTest);
IdentifiableEdgeFactory<Room, HouseEdge<Room>> ief = new IdentifiableEdgeFactory<Room, HouseEdge<Room>>(makeTest2);
graph.DeserializeFromGraphML<Room, HouseEdge<Room>, AdjacencyGraph<Room, HouseEdge<Room>>>(xreader, ivf, ief);
xreader.Close();
这是 makeTest 和 makeTest2 的代码:
private Room makeTest(string cos)
{
MessageBox.Show(cos);
return new Room(11, 12.0, 13.0);
}
private HouseEdge<Room> makeTest2(Room one, Room two, string cos)
{
MessageBox.Show(cos);
return new HouseEdge<Room>(one, two);
}
所以 - 在我的 XML 文件中,我得到了 2 个顶点 - (0,0,0) 和 (1,1,1) 以及它们之间的边缘。当我反序列化它们时,边缘很好,但顶点变为(0,12,0)和(1,12,1)。必须有一些我遗漏的东西(12 个来自 makeTest 方法),但cos
变量只有数字零和一个,就像图中“顶点”中的顶点位置一样(这就是我在 MessageBox 中显示的内容)
我知道乍一看可能很复杂,但也许真的很简单?我错过了什么吗?
提前致谢!