2010-03-30 89 views
0

時處理空值的字符串我有下面的類實現IXmlSerializable的。在實施中WriteXML(),我需要處理,其中這個類的字符串成員可爲空值的情況。處理這個問題的最好方法是什麼?實現IXmlSerializable的接口

目前,我正在使用中,所有的字符串屬性初始化爲空字符串值的默認構造函數。這樣,當調用WriteXml()時,該字符串不會爲空。

另一種方式,我可以做到這一點是在XML編寫的每個字符串之前使用String.IsNullOrEmpty檢查。

我如何能改善這種代碼有什麼建議?

public sealed class FaxSender : IXmlSerializable 
    { 
     #region Public Constants 

     private const string DEFAULT_CLASS_NAME = "FaxSender"; 

     #endregion Public Constants 

     #region Public Properties 

     public string Name { get; set; } 

     public string Organization { get; set; } 

     public string PhoneNumber { get; set; } 

     public string FaxNumber { get; set; } 

     public string EmailAddress { get; set; } 

     #endregion Public Properties 

     #region Public Methods 

     #region Constructors 

     public FaxSender() 
     { 
      Name = String.Empty; 
      Organization = String.Empty; 
      PhoneNumber = String.Empty; 
      FaxNumber = String.Empty; 
      EmailAddress = String.Empty; 
     } 

     public FaxSender(
      string name, 
      string organization, 
      string phoneNumber, 
      string faxNumber, 
      string emailAddress) 
     { 
      Name = name; 
      Organization = organization; 
      PhoneNumber = phoneNumber; 
      FaxNumber = faxNumber; 
      EmailAddress = emailAddress; 
     } 

     #endregion Constructors 

     #region IXmlSerializable Members 

     public System.Xml.Schema.XmlSchema GetSchema() 
     { 
      throw new NotImplementedException(); 
     } 

     public void ReadXml(System.Xml.XmlReader reader) 
     { 
      throw new NotImplementedException(); 
     } 

     public void WriteXml(System.Xml.XmlWriter xmlWriter) 
     { 
      try 
      { 
       // <sender> 
       xmlWriter.WriteStartElement("sender"); 

       // Write the name of the sender as an element. 
       xmlWriter.WriteElementString(
        "name", 
        this.Name.ToString(CultureInfo.CurrentCulture)); 

       // Write the organization of the sender as an element. 
       xmlWriter.WriteElementString(
        "organization", 
        this.Organization.ToString(CultureInfo.CurrentCulture)); 

       // Write the phone number of the sender as an element. 
       xmlWriter.WriteElementString(
        "phone_number", 
        this.PhoneNumber.ToString(CultureInfo.CurrentCulture)); 

       // Write the fax number of the sender as an element. 
       xmlWriter.WriteElementString(
        "fax_number", 
        this.FaxNumber.ToString(CultureInfo.CurrentCulture)); 

       // Write the email address of the sender as an element. 
       xmlWriter.WriteElementString(
        "email_address", 
        this.EmailAddress.ToString(CultureInfo.CurrentCulture)); 

       // </sender> 
       xmlWriter.WriteEndElement(); 

      } 
      catch 
      { 
       // Rethrow any exceptions. 
       throw; 
      } 
     } 

     #endregion IXmlSerializable Members 

     #endregion Public Methods 
    } 
+0

有什麼建議? – 2010-03-30 21:29:39

回答

3

我有一些建議:

1 -只實現IXmlSerializable作爲最後的手段,並通過屬性而不是控制XML序列化。它更簡單,更容易維護。它還處理作爲空引用的屬性。

[XmlRoot("sender")] 
public sealed class FaxSender 
{ 
    [XmlElement("name")] 
    public string Name { get; set; } 
    [XmlElement("organization")] 
    public string Organization { get; set; } 
    [XmlElement("phone_number")] 
    public string PhoneNumber { get; set; } 
    [XmlElement("fax_number")] 
    public string FaxNumber { get; set; } 
    [XmlElement("email_address")] 
    public string EmailAddress { get; set; } 

    // Remaining code omitted 
} 

2 -不要在嘗試\趕上包代碼,如果你要做的唯一事情就是重新拋出每個異常;

3 -在.NET常數的原則是使用PascalCase這將導致DefaultClassName而不是DEFAULT_CLASS_NAME