2011-09-12 136 views
0

我正在研究一種「新語言」(不是這樣雄心勃勃的)XML定義,我想有選擇使用對象圖形víaxml(序列化/反序列化)和API在相同時間。另一個「保留參考」的XmlSerializer問題

<Project> 
<Connections> 
    <Connection Name="MyConnName" ConnectionString="My connection string"\> 
<\Connections> 
<Tables> 
    <Table TableName="MyTable" ConnectionName="MyConnName"\> 
<\Tables> 
<\Project> 

這裏有兩個問題:有類似

public class Project 
{ 
    public List<Connection> Connections { get; set; } 
    public List<Table> Tables { get; set; } 

    /* Constructors and more.... */ 
} 

public class Connection 
{ 
    public string Name { get; set; } 
    public string ConnectionString { get; set; } 

    /* Constructors and more.... */ 
} 

public class Table 
{ 
    public string TableName { get; set; } 
    public Connection Conn { get; set; } 
    /* Constructors and more.... */ 
} 

好了,現在我想序列化/反序列化這個

  1. 類具有 「康恩」 屬性,是對Connection類的引用,但在「語言」(Xml序列化)中重命名爲「ConnectionName」(我想更改名稱以避免混淆純對象引用(Class)和語言「reference by name」(Xml se如你所見,我想保留引用,但不包括像DataContractSerializer那樣的「z.id ??」,當preserveObjectReference被設置爲true時,我想使用「names」(人類更加人性化)可讀)

任何想法?

回答

0

真的沒有什麼好的方法來擴展XmlSerializer來做你想做的,幾乎任何有用的價值'你想要'。

要生成的排序XML的你要找的,你必須與[XmlIgnore]裝飾Connection屬性,添加ConnectionName屬性XmlSerializer的使用,並找到相應的Connection既可以當ConnectionName設置或有時後。

或者,你需要有Table實施IXmlSerializable完全手工實現產生的<Table>元素的代碼。

+0

Thx Jeffrey,但我錯過了一些東西,如果我添加一個ConnectionName屬性並嘗試找到適當的連接後,我將需要找到連接列表(類似parent.Connections,其中父母是我的Project類)但是,如何可以我用XmlSerializable獲得這個引用,當然我不想把它明確地放在xml中,這有可能嗎? – RURIA

+0

你不能。解析完成後,您必須在第二遍中解析引用。 –