将绑定xml绑定到Model Class

时间:2010-02-06 20:57:08

标签: c# asp.net asp.net-mvc xml asp.net-3.5

我正在尝试使用xml作为小型CMS的数据库,例如图库或员工档案 等

然而,所有亚音的头脑我都被困在如何将我的xml文档绑定到模型类 这样我就可以将该类用于强类型视图:

这是我的模特课:

[XmlRoot("employee")]
public class EmployeesModel
{
    [Required]
    [DisplayName("Name: ")]
    [XmlElement("employeeName")]
    public string employeeName { get; set; }

    [Required]
    [DisplayName("Position: ")]
    [XmlElement("employeePosition")]
    public string employeePosition { get; set; }

    [Required]
    [DisplayName("Description")]
    [XmlElement("employeeDescription")]
    public string employeeDescription { get; set; }

    [Required]
    [DisplayName("Photo: ")]
    [XmlElement("employeePhoto")]
    public string employeePhoto { get; set; }

    [Required]
    [DisplayName("ID: ")]
    [XmlElement("employeeID")]
    public int employeeID { get; set; }
}

这是我的代码:

XDocument xmlDoc = XDocument.Load(Server.MapPath("~/App_Data/employees.xml"));

        var model = (from xml in xmlDoc.Descendants("employee")
                                             select xml) as IEnumerable<EmployeesModel>;

        return View(model);

XML

<?xml version="1.0" encoding="utf-8" ?>
<employees>
<employee>
    <employeeName>David parker</employeeName>
     <employeePosition>Senior Web Developer</employeePosition>
     <employeeDescription>This is a test description<br>feele free to add something here.</employeeDescription>
     <employeePhoto>mypic.jpg</employeePhoto>
    <employeeID>1</employeeID></employee></employees>

xml一边工作,但模型总是空的,但是在尝试绑定时我没有得到运行时错误,我知道我应该做的更多,但我需要一些帮助。

为了清楚起见我使用的是asp.net mvc 2 rc 2

感谢

2 个答案:

答案 0 :(得分:5)

您需要将XML反序列化到对象中。您不能简单地将XML转换为对象。当您说as IEnumerable<EmployeesModel>时,由于类型不兼容,您将获得null。您的代码可能如下所示:

var serializer = new XmlSerializer(typeof(EmployeesModel));
var model = 
    from xml in xmlDoc.Descendants("employee")
    select serializer.Deserialize(xml.CreateReader()) as EmployeesModel;

您可以考虑的另一个选择是将项目 XElement转换为EmployeesModel对象,如下所示:

var model =
    from xml in xmlDoc.Descendants("employee")
    select new EmployeesModel {
        employeeName = (string)xml.Element("employeeName"),
        employeePosition = (string)xml.Element("employeePosition"),
        employeeDescription = (string)xml.Element("employeeDescription"),
        employeePhoto = (string)xml.Element("employeePhoto"),
        employeeID = (int)xml.Element("employeeID"), };

正如您所看到的,这可能会变得单调乏味。但是,它可能是适当的。如果您的XML文件代表所有员工数据,但您的视图仅显示数据的子集或不同结构中的数据,则您可能不希望视图模型直接复制数据存储的内容。

答案 1 :(得分:0)

如果要将make xml绑定到模型类,可以在codeplex上使用templay。 此外,您可以对您的模型类及其子类进行一些处理。

https://templay.codeplex.com/