簡體   English   中英

Quickgraph GraphML反序列化中的Vertex Factory

[英]Vertex Factory in Quickgraph GraphML deserialization

我一直在尋找這個,但找不到任何東西。

我正在嘗試使用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),並且它們之間有邊。 當我反序列化它們時,edge很好,但頂點變為(0,12,0)和(1,12,1)。 必須缺少某些內容(十二個來自makeTest方法),但cos變量僅具有數字零和一個,與頂點在圖形的“頂點”中的位置相同(這就是我在MessageBox中顯示的內容)

我知道乍一看可能很復雜,但也許真的很簡單? 我想念什么嗎?

提前致謝!

根據我的研究,這是庫中的錯誤(或者有更多人無法正確使用此庫)。 是圖書館論壇上的討論之一,其他猶太人也遇到與我相同的問題。

因此,我在LINQ to XML中創建了一個代碼,並手動完成了它-它的工作就像在普通XML中導航一樣。 要記住的一件事是使用正確的XName,因為使用字符串作為元素名稱根本行不通。 例如:

XName XNgraph = XName.Get("graph", "http://graphml.graphdrawing.org/xmlns");
var edges = xelement.Elements(XNgraph)

祝您好運,如果您遇到與我相同的問題-希望我對您有所幫助:)

我今天發現了同樣的問題,在找到這篇文章之前,發現了另一種解決方法,以防對任何人有用。

我在檢查GraphMLSerializer的XML輸出時注意到,在對xml進行漂亮打印后(我正在使用Notepad ++插件使XML易於閱讀),它正在正確地反序列化。 因此,我實際上通過對序列化代碼稍作更改為XmlWriter添加了一些設置,以便對輸出的XML進行漂亮的打印來解決此問題:

using (XmlWriter writer = XmlWriter.Create(filename, new XmlWriterSettings { 
        Indent = true,
        WriteEndDocumentOnClose = false
    })) {

    this.SerializeToGraphML<StoryNode, Choice, StoryArcGraph>(writer, 
        v => v.Id,
        e => e.Id
        );
}

我的項目僅加載其自身發出的XML,並且多余的格式設置字符不會造成過多的開銷,因此我發現這是可以接受的解決方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM