Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# MVC4将视图模型传递给控制器-使用JavaScriptSerializer反序列化复杂的JSON对象_C#_Asp.net Mvc_Json_Asp.net Mvc Viewmodel - Fatal编程技术网

C# MVC4将视图模型传递给控制器-使用JavaScriptSerializer反序列化复杂的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

我正在尝试将JSON对象反序列化为强类型的.net对象/类型。这是我想从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对象中,我有一个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)
{
 ...
}