C# 实现IXmlSerializable接口时处理字符串的空值

C# 实现IXmlSerializable接口时处理字符串的空值,c#,string,null,ixmlserializable,C#,String,Null,Ixmlserializable,我有以下实现IXmlSerializable的类。在实现WriteXml()时,我需要处理此类的字符串成员可能为空值的情况。最好的处理方法是什么 目前,我正在使用默认构造函数,其中所有字符串属性都初始化为空字符串值。这样,当调用WriteXml()时,字符串将不会为null 另一种方法是在用xml编写每个字符串之前使用String.IsNullOrEmpty进行检查 关于如何改进这段代码有什么建议吗 public sealed class FaxSender : IXmlSerializ

我有以下实现IXmlSerializable的类。在实现WriteXml()时,我需要处理此类的字符串成员可能为空值的情况。最好的处理方法是什么

目前,我正在使用默认构造函数,其中所有字符串属性都初始化为空字符串值。这样,当调用WriteXml()时,字符串将不会为null

另一种方法是在用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
    }
公共密封类FaxSender:IXmlSerializable
{
#区域公共常数
private const string DEFAULT\u CLASS\u NAME=“FaxSender”;
#端域公共常量
#区域公共财产
公共字符串名称{get;set;}
公共字符串组织{get;set;}
公共字符串PhoneNumber{get;set;}
公共字符串传真号码{get;set;}
公共字符串电子邮件地址{get;set;}
#端域公共属性
#区域公共方法
#区域构造函数
公共传真发送者()
{
Name=String.Empty;
Organization=String.Empty;
PhoneNumber=String.Empty;
FaxNumber=String.Empty;
EmailAddress=String.Empty;
}
公共传真发送者(
字符串名,
字符串组织,
字符串电话号码,
字符串传真号码,
字符串(电子邮件地址)
{
名称=名称;
组织=组织;
PhoneNumber=电话号码;
传真号码=传真号码;
EmailAddress=电子邮件地址;
}
#端域构造函数
#区域IXmlSerializable成员
public System.Xml.Schema.XmlSchema GetSchema()
{
抛出新的NotImplementedException();
}
public void ReadXml(System.Xml.XmlReader)
{
抛出新的NotImplementedException();
}
public void WriteXml(System.Xml.XmlWriter)
{
尝试
{
// 
xmlWriter.WriteStarteElement(“发送方”);
//将发件人的名称作为元素写入。
xmlWriter.WriteElementString(
“姓名”,
this.Name.ToString(CultureInfo.CurrentCulture));
//将发件人的组织作为元素写入。
xmlWriter.WriteElementString(
“组织”,
this.Organization.ToString(CultureInfo.CurrentCulture));
//将发件人的电话号码作为元素写入。
xmlWriter.WriteElementString(
“电话号码”,
this.PhoneNumber.ToString(CultureInfo.CurrentCulture));
//将发件人的传真号码作为元素写入。
xmlWriter.WriteElementString(
“传真号码”,
this.FaxNumber.ToString(CultureInfo.CurrentCulture));
//将发件人的电子邮件地址作为元素写入。
xmlWriter.WriteElementString(
“电子邮件地址”,
this.EmailAddress.ToString(CultureInfo.CurrentCulture));
// 
xmlWriter.WriteEndElement();
}
抓住
{
//重新显示任何异常。
投掷;
}
}
#endregion IXmlSerializable成员
#端域公共方法
}

我有一些建议:

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-如果您要做的唯一一件事是重新引用每个异常,则不要在try\catch中包装代码


3-在.NET中使用常量的指导原则是使用PascalCase,这将导致
DefaultClassName
而不是
DEFAULT\u CLASS\u NAME
,我有一些建议:

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-如果您要做的唯一一件事是重新引用每个异常,则不要在try\catch中包装代码

3-在.NET中常量的指导原则是使用PascalCase,这将导致
DefaultClassName
而不是
DEFAULT\u CLASS\u NAME