2010-03-19 61 views
2

我有以下兩類其將對象轉換成XML字符串搞不清哪些對象應該我來分配功能來

,我應該這樣做

class Person 
{ 

    public string GetXml() 
    { 
     //return a xml string 
    } 
} 

,或者它是最好創建另一個類接受個人作爲參數 並將其轉換成XML類似

class PersonSerializer 
{   
    public string Serialize(Person person) 
    { 
      // return a xml string 
    } 

} 

感謝

回答

2

通常,Serialize方法應位於要序列化的類上;這樣,它可以訪問其他類無法訪問的所有私有成員變量,並且通常更高效地執行操作。

0

第二個選項。您可以創建一個可以序列化不同對象/類的通用序列化程序。 保持你的課程只是簡單的,做它應該做的。序列化不是一個人應該做的事。

3

要問的問題:一個人對XML有什麼瞭解?

答案是:沒有什麼

因此,第三投給一個單獨的序列化。

+0

是的我同意,但我已經看到了類似的東西。淨類本身 例如: int int1 = 1; int1.ToString(); – CliffC

+0

我不認爲製作一個單獨的課程會是一個好主意。他正在使用它來序列化Person對象。所以,我認爲,對象本身應該知道如何序列化自己。 – ata

+0

ToString被視爲低級別項目,它來自system.object並且也是調試器中的默認字符串表示形式。妥協。 @ comerback84 - 很好的答案。可悲的是...仍然是主題錯誤。怎麼樣分析?;) – TomTom

0

要完成,您應該使用IXmlSerializable接口。即:

class Person : IXmlSerializable 
{ 
    #region IXmlSerializable Members 

    public System.Xml.Schema.XmlSchema GetSchema() 
    { 
     // Provide Schema 
     return null; 
    } 

    public void ReadXml(System.Xml.XmlReader reader) 
    { 
     // Read XML into Object 
    } 

    public void WriteXml(System.Xml.XmlWriter writer) 
    { 
     // Write XML here 
    } 

    #endregion 

    // Added as example to what I have said below 
    public override string ToString() 
    { 
     // Make XML String 
     return "XML STRING"; 
    } 
} 

針對TomTom公司您的評論:

是的,我同意,但是我看到的.NET類本身類似的例子:int INT1 = 1; int1.ToString();

你在這裏看到的是覆蓋ToString()方法。我更新了上面的代碼來說明它的用法。

1

.NET中已經有了一個用於對象的XML序列化的機制,請查看this article以獲取有關可用於聲明性標記要序列化的類的各個方面的屬性的詳細信息。

您的原始問題實際上是詢問是否將序列化信息嵌入到它所屬的類中,或將其放入單獨的相關類中。第一種方法的優點是序列化代碼能夠直接訪問私有成員,並且與類緊密結合。缺點是序列化代碼覆蓋了類的實際邏輯 - 如果您也添加了二進制序列化,這會變得更加明顯。

在.NET中,實際上有一種稱爲序列化代理的機制,用於將序列化邏輯分離爲單獨的類。詳情請參閱part 3 of this article

0

.NET XmlSerializer可以序列化任何類型。序列化的元素都是pulic讀/寫屬性。因此,PersonXmlSerializer已經存在;-)

+0

在.net XmlSerializer的構建是有用但是例如存在於它的一些限制它會返回一個錯誤,如果有任何你想要序列化的類的任何接口 – CliffC

+0

@CliffC:真的......?你介意給我一個例子嗎? – Seb

+1

鏈接發出http://geekswithblogs.net/SoftwareDoneRight/archive/2008/01/16/how-to-serialize-an-interface-using-the-xmlserializer.aspx – CliffC

相關問題