开发者

stuck binding xml to Model Class

I am experimenting with using xml as a database for small CMS, like gallery or staff profiles etc

however being all subsonic minded i am stuck on how i bind my xml document to a modelclass so that i can then use that class for strongly typed views:

here is my model class:

[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; }
}

and here is my code:

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);

the 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>

the xml side work but model is always empty, however i get no runtime erros when trying to bind, i know there is more i should do here but i need some help.

for clarity i am using asp.net mvc 2 rc 2

thanks


You need to deserialize the XML into objects. You cannot simply cast XML as objects. When you say as IEnumerable<EmployeesModel>, you'll get a null since the types aren't compatible. Your code could look something like this:

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

Another option you could consider is to project the XElements into EmployeesModel objects, like this:

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"), };

As you can see, that can get tedious. However, it may be appropriate. If your XML file represents all employee data but your view shows only a subset of the data or the data in a different structure, you probably don't want your view model to be a direct copy of the contents of your data store.


If you want make binding xml to model class, you can use templay on codeplex. Further you can do some process on your model class and their childrens.

https://templay.codeplex.com/

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜