在C#XML中生成选择节点
我有低于员工级别的课程。我需要从这个类生成一个xml,这样任何一个属性都只允许。要么是工薪阶层1,要么是工薪阶层2 如果从数据库获取的salary1大于Salary2,则生成的XML应仅包含salary1 XMLElement,并且生成的XML中应不包含Salary2 XML元素 现在我在生成的XML中获得了这两个元素 如果从数据库获取的salary2大于Salary1,则生成的XML应仅包含salary2 XMLElement,并且生成的XML中应不包含Salary1 XML元素 我尝试过使用选择标识符,但无法理解它 公共课程 { }试试这个:在C#XML中生成选择节点,c#,xml,xsd,xsd-validation,C#,Xml,Xsd,Xsd Validation,我有低于员工级别的课程。我需要从这个类生成一个xml,这样任何一个属性都只允许。要么是工薪阶层1,要么是工薪阶层2 如果从数据库获取的salary1大于Salary2,则生成的XML应仅包含salary1 XMLElement,并且生成的XML中应不包含Salary2 XML元素 现在我在生成的XML中获得了这两个元素 如果从数据库获取的salary2大于Salary1,则生成的XML应仅包含salary2 XMLElement,并且生成的XML中应不包含Salary1 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;
}
}
}
并按原样序列化对象
希望它能对您有所帮助。感谢各位的回答和指导。但在我的场景中,由于某些原因,我不能拥有像salary这样的单一属性。将数据类型从Int更改为String可以解决这个问题
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();
}
}
要仅获得一份薪水,请使用继承的两个类别Salary1和Salary2创建基本类别薪水。然后,将数据库中的属性设置为将接受Salary1或Salary2的基类Salary。为什么不创建一个Salary属性,并用符合条件的正确值初始化它?
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();
}
}