Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to map my model data (list) with another viewmodel data (list) MVC asp.net

How to map my model data (list) with another viewmodel data (list) in this case?

Here is what i have:

My json viewmodel

public class JsonViewModel
{
    public List<JsonItem> Items { get; set; } 
}

public class JsonItem
{
    public string Name { get; set; }
    public int Unit { get; set; }
    public decimal Price { get; set; }
    public IEnumerable<Item> ItemStock { get; set; } 
}

My main Model

public class Item
{
    public int ItemId { get; set; }
    public string Name { get; set; }
    public int QuantityInPack { get; set; }
    public int Quantity { get; set; }
    public decimal Price { get; set; }
    public bool IsHidden { get; set; }
}

which should be mapped in this way:

  • Item.QuantityInPack = JsonItem.Unit
  • Item.Price = JsonItem.Price

where Item.Name = JsonItem.Name


Controller

public ActionResult Index()
{
    // 1. Perform HTTP request to retrieve the JSON.
    var webClient = new WebClient();
    string rawJson = webClient.DownloadString("http://my_json_data");

    // 2. Parse the JSON.
    var jsonRootObject = JsonConvert.DeserializeObject<JsonViewModel>(rawJson);

    // 3. Map to viewmodel
    var viewModel = new JsonViewModel
    {
        Items = jsonRootObject.Items.Select(i => new JsonItem
        {
            Name = i.Name,
                    Unit = i.Unit,
                    Price = i.Price
        }).ToList()
    };



    /// var TestItem = db.Items.ToList();
    /// TestItem.QuantityInPack = JsonItem.Unit
    /// TestItem.Price = JsonItem.Price
    ///     where Item.Name = JsonItem.Name
    ///
    /// (I know it's a bad, but I wanted to explain what I mean)
    /// Here i should map data in some way
    /// 
    ///

    // 4. Return mapped model to view
    return View( TestItem??? );
}
like image 460
DiPix Avatar asked Oct 30 '22 13:10

DiPix


1 Answers

If i understood right, you want to synchronize JsonViewModel with main model and return synchronized main model to view:

public ActionResult Index()
{
    ...
    var itemList = db.Items.ToList();
    if (jsonRootObject.Items != null)
    {
        jsonRootObject.Items.ForEach(i =>
        {
            var item = itemList.FirstOrDefault(p => p.Name = i.Name);
            if (item != null)
            {
                item.QuantityInPack = i.Unit;
                item.Price = i.Price;
            }
        });
    }
    return View(itemList);
}
like image 60
Gene R Avatar answered Nov 15 '22 05:11

Gene R