如何在c#中使用XmlSerializer获取XML属性

时间:2016-07-19 12:18:23

标签: c# xml

我有这个类和xml文件,我用它来获取值。

XML文件

<Task>
  <Employee Id="123">
    <string>/Name</string>
    <string>/Company</string>
  </Employee>

  <Manager Id="456">
    <string>/Name</string>
    <string>/Company</string>
  </Manager>
</Task>

代码

public class Task
{
    public List<string> Employee;
    public List<string> Manager;
}

var taks = (Task)new XmlSerializer(typeof(Task)).Deserialize(streamReader);

所以,在任务中,我正在使用Name和Compnay作为值获取 Employee 的列表。我想获得每个元素的Id。我怎么得到它?

/姓名和/公司可以是任何东西。我可以在那里放任何价值,我在员工中得到它,甚至没有为它创建一个属性。对于Manager也一样,我可以有/ Email,/ Website,/ LastLogin等,我在Manager对象中得到它,甚至没有为它创建属性。

感谢您的时间和帮助。

1 个答案:

答案 0 :(得分:2)

按如下方式定义Task课程:

public class Task
{
    public Employee Employee;
    public Manager Manager;
}

Employee的位置:

public class Employee
{
    [XmlAttribute]
    public string Id {get;set;}

    public string Name{get;set;}

    public string Company{get;set;}
}

Manager是:

public class Manager
{
    [XmlAttribute]
    public string Id {get;set;}

    public string Name{get;set;}

    public string Company{get;set;}
}

如果您对Employee和/或Manager的通用属性列表感兴趣,请考虑使用另一个名为Property的类,如下所示:

public class Property
{
     [XmlAttribute]
     public string Value{get;set;}
}

然后,将ManagerEmployee更改为以下内容:

public class Employee
{
    [XmlAttribute]
    public string Id {get;set;}

    public List<Property> Properties {get;set;}
}

public class Manager
{
    [XmlAttribute]
    public string Id {get;set;}

    public List<Property> Properties {get;set;}
}

最后,按以下方式更改XML:

<Task>
  <Employee Id="123">
    <Properties>
       <Property Value="/Name" />
       <Property Value="/Company"/>
    </Properties>
  </Employee>

  <Manager Id="456">
    <Properties>
       <Property Value="/Name" />
       <Property Value="/Company"/>
    </Properties>
  </Manager>
</Task>