Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在C#XML中生成选择节点_C#_Xml_Xsd_Xsd Validation - Fatal编程技术网

在C#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元素 我尝试过使用

我有低于员工级别的课程。我需要从这个类生成一个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();

    }

}