C# MVC4将视图模型传递给控制器-使用JavaScriptSerializer反序列化复杂的JSON对象
我正在尝试将JSON对象反序列化为强类型的.net对象/类型。这是我想从JSON创建的对象C# MVC4将视图模型传递给控制器-使用JavaScriptSerializer反序列化复杂的JSON对象,c#,asp.net-mvc,json,asp.net-mvc-viewmodel,C#,Asp.net Mvc,Json,Asp.net Mvc Viewmodel,我正在尝试将JSON对象反序列化为强类型的.net对象/类型。这是我想从JSON创建的对象 [Serializable] public class CartItem { [Key] public int Id { get; set; } public virtual Product Product { get; set; } public virtual List<SelectedProductOption> SelectedProductOption
[Serializable]
public class CartItem
{
[Key]
public int Id { get; set; }
public virtual Product Product { get; set; }
public virtual List<SelectedProductOption> SelectedProductOptions { get; set; }
public virtual Cart Cart { get; set; }
public int Quantity { get; set; }
}
在我的CartItem对象中,我有一个SelectedProductOption的集合(这就是我遇到问题的地方),这是SelectedProductOption的定义
[Serializable]
public class SelectedProductOption
{
public Option Option { get; set; }
public AllowedOptionValue Value { get; set; }
}
[Serializable]
public class Option
{
[Key]
public int Id { get; set; }
public string OptionName { get; set; }
public virtual OptionGroup OptionGroup { get; set; }
}
[Serializable]
public class AllowedOptionValue
{
[Key]
public int Id { get; set; }
public virtual Option Option { get; set; }
public string OptionValue { get; set; }
public string OptionCaption { get; set; }
public decimal? PriceOffSet { get; set; }
public bool? IsPercentageOffSet { get; set; }
}
现在这就是我试图序列化的JSON对象
{\"Product\":{\"Id\":1,\"Price\":3.5,\"ProductName\":\"Rice Meal One\",\"Category\": {\"Id\":1,\"CategoryName\":\" Rice Meals\",\"ImageURL\":\" \"},\"SelectedProductOptions\":[{\"Option\":{\"Id\":1,\"OptionName\":\"OptionName1\",\"OptionGroup\":{\"Id\":1,\"OptionGroupName\":\"Option Group\"}},\"Value\":{\"Id\":1,\"Option\":{\"Id\":4,\"OptionName\":\"OptionName2\",\"OptionGroup\":{\"Id\":1,\"OptionGroupName\":\"Option Group2\"}},\"OptionValue\":\"12123123\",\"OptionCaption\":\"12123123\",\"PriceOffSet\":3.2,\"IsPercentageOffSet\":true}},{\"Option\":{\"Id\":1,\"OptionName\":\"dsa\",\"OptionGroup\":{\"Id\":1,\"OptionGroupName\":\"asdas\"}},\"Value\":{\"Id\":1,\"Option\":{\"Id\":1,\"OptionName\":\"dsa\",\"OptionGroup\":{\"Id\":1,\"OptionGroupName\":\"asdas\"}},\"OptionValue\":\"12123123\",\"OptionCaption\":\"12123123\",\"PriceOffSet\":3.2,\"IsPercentageOffSet\":true}}]}}
所以当我打电话时:
CartItem cartItem = js.Deserialize<CartItem>(formData);
CartItem CartItem=js.反序列化(formData);
CartItem.Product具有正确的值
CartItem.Product.Category具有正确的值
但是
CarItem.SelectedProductOptions为空
我哪里做错了?唯一不起作用的属性,关于如何修复它有什么想法吗 无需手动执行,asp.net MVC将为您执行:) 在视图中,创建一个表单,其中包含所有必需的字段: @模型项
<form action="/mycontroller/myaction">
@Html.TextBoxFor(m => mode.ProductName)
...
<button type=submit>OK</button>
</form>
carItem对象应该包含您在视图中输入的所有数据您需要它只是为了将数据从视图传递到控制器吗?不明白您的意思。。。因为它是一个相当大的对象,我在想,也许我应该将它拆分并反序列化为两个阶段,分别执行所选选项@vladl为什么用asp.net mvc标记这个问题?因为它是一个mvc应用程序。。。JSON对象来自我试图将该视图模型转换为“cart item”对象的视图。。已经被困了一段时间了。。。考虑改变我的方法,可能只是传递一些ID,然后尝试在服务器端创建cartitem。@VladL我的问题有意义吗?我真的不喜欢发布这么多代码。。但我在这件事上耽搁了一段时间了?
<form action="/mycontroller/myaction">
@Html.TextBoxFor(m => mode.ProductName)
...
<button type=submit>OK</button>
</form>
[HttpPost]
public ActionResult myaction(CartItem carItem)
{
...
}