【发布时间】:2016-03-21 03:57:22
【问题描述】:
在这种情况下,如何将我的模型数据(列表)与另一个视图模型数据(列表)映射?
这是我所拥有的:
我的 json 视图模型
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; }
}
我的主要模型
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; }
}
应该以这种方式映射:
-
Item.QuantityInPack = JsonItem.Unit -
Item.Price = JsonItem.Price
在哪里Item.Name = JsonItem.Name
控制器
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??? );
}
【问题讨论】:
-
您是否尝试过寻找类似AutoMapper 的内容,它可以使用conventions 为您映射这些字段。如果这还不够,您可以提供您自己的自定义 resolvers。
-
另外我不想让你脱离正轨,但我建议你将视图模型构建逻辑移到 abstraction 上,这可以帮助你保持控制器的轻量级并且您只需要测试您的视图模型构建器是否正确behaviour。
标签: asp.net json asp.net-mvc database viewmodel