2012-05-23 29 views
0

我有一個棘手的問題。比方說,我有一個名爲ObjectHost的類,其中包含BusinessObject類型的屬性,它本身包含一些屬性(假設NameTown爲字符串)。 該代碼將是:如何序列化一個包含的對象/屬性作爲根?

public class ObjectHost 
{ 
    public BusinessObject Data { get; set; } 

    public ObjectHost() 
    { 
     Data = null; 
    } 

    public ObjectHost(BusinessObject ei) 
    { 
     Data = ei; 
    } 

    public override string ToString() 
    { 
     return (Data == null) ? "null" : Data.ToString(); 
    } 
} 

序列化時,會產生類似:

<ObjectHost> 
    <Data> 
    <Name>My name</Name> 
    <Town>London</Town> 
    </Data> 
</ObjectHost> 

在哪裏,我想它是:

<Name>My name</Name> 
<Town>London</Town> 

,因爲它是唯一一個封裝對象在我的特定用途(用於其他目的)。

我嘗試使用XmlRootXmlElement屬性,但我沒有達到我的目標。

有沒有解決方案呢?

+0

你現在如何序列化它? – SirPentor

+0

實際上,ObjectHost對象是其他父對象的屬性,它們都使用'XmlSerializer'進行序列化。 – Sierramike

回答

0

據我所知,你使用XmlSerializer來序列化一個對象。

您正在傳遞ObjectHost並且只想要發射ObjectHost.BusinessObject的屬性。

您可以使用下列的一個方法序列化數據的

  1. 後處理 - >以獲得所需的數據

    /ObjectHost/Data 
    
  2. 自定義序列化過程中使用XPath查詢:(這是有點棘手)
    a)實現IXmlSerializable
    b)自定義ReadXml,WriteXml和GetSchema

    在WriteXml中,使用XPath查詢或其他Xml方法(獲取XmlNodes)並只寫入所需的屬性。
    此方法將綁定到特定的數據結構,並且不能用於不兼容的數據結構。

+0

謝謝,我認爲這是一個好方法,但是您能否指出我對WriteXml/ReadXml的一些實現準則?實際上他們有一個'XmlWriter' /'XmlReader'作爲方法參數,在這裏應該完成序列化。我不知道我應該使用什麼類型的「臨時XmlWriter」來獲取序列化的「Data」對象,然後移動到子節點,然後提取它們以將它們放入原始的'XmlWriter'中,'WriteXml'方法給我... – Sierramike

相關問題