しばらくこれを探していましたが、何も見つかりませんでした。
C# で Quickgraph を使用して、GraphML からグラフを逆シリアル化しようとしています。Vertex と Edge を表すために使用するクラスは次のとおりです。
[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 ファイルでは、(0,0,0) と (1,1,1) の 2 つの頂点とそれらの間のエッジを取得しました。それらをデシリアライズすると、エッジは問題ありませんが、頂点は (0,12,0) と (1,12,1) になります。私が見逃しているものがあるはずです(12個はmakeTestメソッドから来ています)が、cos
変数にはグラフの「頂点」の頂点の位置と同じように0と1しかありません(それがMessageBoxに表示されているものです)
一見すると複雑かもしれませんが、本当に単純なのでしょうか? 何か不足していますか?
前もって感謝します!