2017-06-16 10 views
0

私は以下の従業員クラスを持っています。私はこのクラスからxmlを生成する必要があります。そのため、1つのプロパティだけが許可されます。 salary1またはsalary2のいずれかです。C#XMLで選択ノードを生成

salary1は、データベースから取得した場合には、生成されたXMLは、XML Elmentが

は、今私は、生成されたXMLの両方の要素を取得し、生成されたXMLには存在しないべきであるだけsalary1のXMLElementのとsalary2が含まれている必要がありSalary2よりも大きくなります。

salary2がSalary1より大きい場合、生成されるXMLにはsalary2 XMLElementのみが含まれ、salary1 XML Elmentは生成されたXMLには存在しないはずです。

私は選択肢識別子を使用しようとしましたが、理解できませんでした。

public class Employee 
{ 
    private int salary; 

    [XmlIgnore] 
    public int Salary1 { get; set; } 

    [XmlIgnore] 
    public int Salary2 { get; set; } 

    [XmlAttribute(AttributeName = "Salary")] 
    public int SalaryToSerialize 
    { 
     get 
     { 
      salary = Math.Max(this.Salary1, this.Salary2); 
      return salary; 
     } 
     set 
     { 
      salary = value; 
     }  
    } 
} 

を、そのままオブジェクトをシリアル化:

パブリッククラスプログラム {

public class Employee 
    { 

     public int Salary1 { get; set; } 
     public int Salary2 { get; set; } 

    } 

     public static class Database 
     { 
      public static int Salary1 = 100; 
      public static int Salary2= 50; 
     } 

    public static void Main(string[] args) 
    { 

     XmlSerializer xsSubmit = new XmlSerializer(typeof(Employee)); 

     Employee subReq; 
     if (Database.Salary1 > Database.Salary2) 
     { 
      subReq = new Employee { Salary1 = Database.Salary1 }; 
     } 
     else 
     { 
      subReq = new Employee { Salary2 = Database.Salary2 }; 
     } 
     var xml = ""; 

     using (var sww = new StringWriter()) 
     { 
      using (XmlWriter writer = XmlWriter.Create(sww)) 
      { 
       xsSubmit.Serialize(writer, subReq); 
       xml = sww.ToString(); // Your XML 
      } 
     } 

     Console.WriteLine(xml); 
     Console.ReadLine(); 

    } 
} 

}

+0

を解決し、INTからいくつかのreasons.Changingデータタイプのために給料のような1つのプロパティを持つことができない私のシナリオは、以下の2つの継承されたクラスSalary1とSalary2と、基本クラスの給与を作ります。次に、DataBaseの基本クラスSalaryにSalary1またはSalary2のいずれかを受け入れるプロパティを設定します。 – jdweng

+0

給与のプロパティを1つしか持たず、条件を満たす適切な値で初期化するのはなぜですか? –

答えて

0

ご回答ありがとうございます。しかし、私は文字列に一つだけの給料を取得するには問題

public static class Program 
{ 

    public class Employee 
    { 

     public string Salary1 { get; set; } 


     public string Salary2 { get; set; } 





    } 

    public static class Database 
    { 
     public static int? Salary1 = 100; 
     public static int? Salary2 = 50; 
    } 

    public static void Main(string[] args) 
    { 

     XmlSerializer xsSubmit = new XmlSerializer(typeof(Employee)); 

     Employee subReq; 
     if (Database.Salary1 > Database.Salary2) 
     { 
      subReq = new Employee { Salary1 = Database.Salary1.ToString() }; 
     } 
     else 
     { 
      subReq = new Employee { Salary2 = Database.Salary2.ToString() }; 
     } 
     var xml = ""; 

     using (var sww = new StringWriter()) 
     { 
      using (XmlWriter writer = XmlWriter.Create(sww)) 
      { 
       xsSubmit.Serialize(writer, subReq); 
       xml = sww.ToString(); // Your XML 
      } 
     } 

     Console.WriteLine(xml); 
     Console.ReadLine(); 

    } 

} 
0

はこれを試してみてください。

ご希望の場合はお手数ですが、

関連する問題