user10436962
user10436962

Reputation:

XML to C# List to AspNet MVC Index

I have to display the list of AvailabilityOutbound and AvailabilityReturn having multiple records i.e AvailabilityFlight of each in index page of asp.net mvc. The structure for the model classes and controller method is below. I didn't get any idea how to proceed next. The below class is generated via XML response from SOAP asmx service and then mapped to C# Classes.

[XmlRoot(ElementName = "AvailabilityOutbound")]
public class AvailabilityOutbound
{
    [XmlElement(ElementName = "AvailabilityFlight")]
    public List<AvailabilityFlight> AvailabilityFlight { get; set; }
}

[XmlRoot(ElementName = "AvailabilityReturn")]
public class AvailabilityReturn
{
    [XmlElement(ElementName = "AvailabilityFlight")]
    public List<AvailabilityFlight> AvailabilityFlight { get; set; }
}

[XmlRoot(ElementName = "Availability")]
public class Availability
{
    [XmlElement(ElementName = "AvailabilityOutbound")]
    public AvailabilityOutbound AvailabilityOutbound { get; set; }

    [XmlElement(ElementName = "AvailabilityReturn")]
    public AvailabilityReturn AvailabilityReturn { get; set; }
}

[XmlRoot(ElementName = "AvailabilityFlight")]
public class AvailabilityFlight
{
    [XmlElement(ElementName = "airline_rcd")]
    public string Airline_rcd { get; set; }
    [XmlElement(ElementName = "flight_number")]
    public string Flight_number { get; set; }
    [XmlElement(ElementName = "booking_class_rcd")]
    public string Booking_class_rcd { get; set; }
    [XmlElement(ElementName = "boarding_class_rcd")]
    public string Boarding_class_rcd { get; set; }
}

The controller method where data need to be displayed is:

public ActionResult Index(string xmlResult)
{
    var ser = new XmlSerializer(typeof(Availability));
    using (var sr = new StringReader(xmlResult))
    {
        var obj = (Availability)ser.Deserialize(sr);
        return //
    }
    //no idea how can i map the records to view
    return View();

}

and the view as:

@model IEnumerable<Project.Models.AvailabilityFlight>

I need guidance on passing the list to view and displaying the records in index view with few sample code snippets for view and index method.

Upvotes: 1

Views: 188

Answers (2)

jdweng
jdweng

Reputation: 34429

I would create a dataset and the display using similar code to following posting :

Display DataTable information in aspx page

The code to put data into a dataset would look like this :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Xml;
using System.Xml.Serialization;
using System.IO;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            DataSet ds = new DataSet("Availability");
            DataTable dtFlight = new DataTable("Flight");
            ds.Tables.Add(dtFlight);

            dtFlight.Columns.Add("Airline RCD",typeof(string));
            dtFlight.Columns.Add("Flight Number",typeof(string));
            dtFlight.Columns.Add("Booking Class",typeof(string));
            dtFlight.Columns.Add("Boarding Class",typeof(string));

            DataTable dtReturn = new DataTable("Return");
            ds.Tables.Add(dtReturn);

            dtReturn.Columns.Add("Airline RCD", typeof(string));
            dtReturn.Columns.Add("Flight Number", typeof(string));
            dtReturn.Columns.Add("Booking Class", typeof(string));
            dtReturn.Columns.Add("Boarding Class", typeof(string));


            string xml = "put your sting here";
            Availability availability = DeSerialize<Availability>.Index(xml);

            foreach (AvailabilityFlight flight in availability.AvailabilityOutbound.AvailabilityFlight)
            {
                dtFlight.Rows.Add(new object[] { flight.Airline_rcd, flight.Flight_number, flight.Booking_class_rcd, flight.Boarding_class_rcd });
            }

            foreach (AvailabilityFlight flight in availability.AvailabilityReturn.AvailabilityFlight)
            {
                dtReturn.Rows.Add(new object[] { flight.Airline_rcd, flight.Flight_number, flight.Booking_class_rcd, flight.Boarding_class_rcd });
            }
        }


    }
    public class DeSerialize<T>
    {
        public static T Index(string xmlResult)
        {
            var ser = new XmlSerializer(typeof(T));
            using (var sr = new StringReader(xmlResult))
            {
                 return (T)ser.Deserialize(sr);
            }
        }

    }
    [XmlRoot(ElementName = "AvailabilityOutbound")]
    public class AvailabilityOutbound
    {
        [XmlElement(ElementName = "AvailabilityFlight")]
        public List<AvailabilityFlight> AvailabilityFlight { get; set; }
    }
    [XmlRoot(ElementName = "AvailabilityReturn")]
    public class AvailabilityReturn
    {
        [XmlElement(ElementName = "AvailabilityFlight")]
        public List<AvailabilityFlight> AvailabilityFlight { get; set; }
    }
    [XmlRoot(ElementName = "Availability")]
    public class Availability
    {
        [XmlElement(ElementName = "AvailabilityOutbound")]
        public AvailabilityOutbound AvailabilityOutbound { get; set; }

        [XmlElement(ElementName = "AvailabilityReturn")]
        public AvailabilityReturn AvailabilityReturn { get; set; }
    }
    [XmlRoot(ElementName = "AvailabilityFlight")]
    public class AvailabilityFlight
    {
        [XmlElement(ElementName = "airline_rcd")]
        public string Airline_rcd { get; set; }
        [XmlElement(ElementName = "flight_number")]
        public string Flight_number { get; set; }
        [XmlElement(ElementName = "booking_class_rcd")]
        public string Booking_class_rcd { get; set; }
        [XmlElement(ElementName = "boarding_class_rcd")]
        public string Boarding_class_rcd { get; set; }
    }
}

Upvotes: 0

Hossein
Hossein

Reputation: 3113

First of all, You must return Availability to view

  public ActionResult Index(string xmlResult)
  {
      var ser = new XmlSerializer(typeof(Availability));
      using (var sr = new StringReader(xmlResult))
      {
           var obj = (Availability)ser.Deserialize(sr);
           return View(obj);
      }
  }

In view :

@model Project.Models.Availability

@foreach (var item in Model.AvailabilityOutbound.AvailabilityFlight )  
{
  ...  // each item of AvailabilityFlight in AvailabilityOutbound
}

@foreach (var item in Model.AvailabilityReturn.AvailabilityFlight )  
{
  ...  // each item of AvailabilityFlight in AvailabilityReturn 
}

Upvotes: 1

Related Questions