0

我正在使用 c# 在 .Net 上工作。在 c# 中,类想要使用可选属性,比如我有 PERSON 类,其中有 NAME、AGE、CITY 和 GENDER 等属性。

 public class PERSON
 {
   public string NAME{get; set;};
   public int AGE {get; set;}
   public string CITY {get; set;}
   public string GENDER {get; set;}
 }

现在我为 NAME、AGE 和 CITY 分配了属性值。

 PERSON objper = new PERSON();
 objper.NAME="ABC";
 objper.AGE="22";
 objper.CITY="NYC";

 string strresult = calPerson(objper);

现在我将这个 PERSON 对象“objper”传递给一个方法,该方法以 xml 格式返回 PERSON 的属性值,如下所示。我没有传递 GENDER 属性的值。

 public string calPerson(PERSON objPerson)
{
   //"<xml><name>abc</name><age>22</age><city>nyc</city><gender></gender></xml>"
   return xml formated string.
}

在创建 xml 格式的字符串时,即使没有向其发送任何值,我也会获得具有空值的 GENDER 节点。

我只想

    <xml>
       <name>abc</name><age>22</age><city>nyc</city>
    </xml>

作为输出。

现在我有另一个方法 calGender() 接受 PERSON 对象。

 objper = new PERSON();
 objper.GENDER="male";

public string calGender(PERSON objPerson)
{
   //"<xml><name></name><age></age><city></city><gender>male</gender></xml>"
   return xml formated string.
}

在创建 xml 格式的字符串时,即使没有向其发送任何值,我也会使用 null 获取名称、年龄和城市节点值。

我只想

       <xml>
          <gender>male</gender>
       </xml>

作为输出。

所以,我只想将 NAME、AGE 和 CITY 属性用于 calPerson() 方法。我不希望 PERSON 类中的 GENDER 属性。我只想将 GENDER 属性用于 calGender() 方法。我不希望 PERSON 类中的 NAME、AGE 和 CITY 属性。

请建议我如何做到这一点...

阿尼尔贾扬蒂。

4

3 回答 3

2

您可以很好地使用内置的序列化程序,例如DataContractSerializerXmlSerializer并使用该[XmlIgnore]属性来跳过您不想序列化的任何属性。

有关更多详细信息,请参阅此处

于 2013-05-13T09:26:28.460 回答
1

你在使用内置的 XML 序列化器吗?如果是这样,请尝试创建一些PERSON具有相同名称的附加属性,但添加后缀Specified,例如:

[XmlIgnore]
public bool GENDERSpecified { get { return !String.IsNullOrEmpty(GENDER); } }

这应该指示 XMLSerialiser 仅在 GENDER 节点有值时才输出它。

完整的细节在这里:http: //msdn.microsoft.com/en-us/library/system.xml.serialization.xmlserializer.aspx

于 2013-05-13T09:32:22.867 回答
0
 public class PERSON
 {
   public string NAME{get; set;}
   public int AGE {get; set;}
   public string CITY {get; set;}

 }
class PERSON1 : PERSON
{
      public string GENDER {get; set;}
}

在调用“calPerson()”时使用 PERSON,在“calGender()”中使用 PERSON1

于 2013-05-13T09:29:44.727 回答