DiPix DiPix - 6 months ago 18
JSON Question

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

Answer

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