我正在尝试将JSON对象反序列化为强类型的.net对象/ Type。这是我想从JSON
创建的对象[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的其他对象的定义,但是记住它的CartItem我想最终以
结束[Serializable]
public class Product
{
[Key]
public int Id { get; set; }
public string ProductName { get; set; }
public decimal Price { get; set; }
public virtual Category Category { get; set; }
}
[Serializable]
public class Category
{
[Key]
public int Id { get; set; }
public string CategoryName { get; set; }
public string ImageURL { 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.Product具有正确的值 CartItem.Product.Category具有正确的值
但
CarItem.SelectedProductOptions为null ...
我哪里错了?唯一没有工作的房产,有关如何解决的任何想法?
答案 0 :(得分:0)
没有必要手动执行,asp.net MVC将为您完成:)
在视图中创建一个包含所有必填字段的表单:
@model CartItem;
<form action="/mycontroller/myaction">
@Html.TextBoxFor(m => mode.ProductName)
...
<button type=submit>OK</button>
</form>
并定义您的控制器操作,如:
[HttpPost]
public ActionResult myaction(CartItem carItem)
{
...
}
carItem对象应包含您在视图中输入的所有数据