Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.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# 包含数组映射到asp.net字典的json对象_C#_Asp.net_Asp.net Mvc_Model Binding - Fatal编程技术网

C# 包含数组映射到asp.net字典的json对象

C# 包含数组映射到asp.net字典的json对象,c#,asp.net,asp.net-mvc,model-binding,C#,Asp.net,Asp.net Mvc,Model Binding,我知道问题的标题不是很清楚和具体,但我真的不知道如何用几句话来描述它。这里有更多的故事 我想通过POST请求向ASP.NET4MVC控制器发送一个对象,希望它能绑定到一个C#模型。前端为角度1.5,对象未通过表单提交发送 我想寄什么 var model = { id:1, filters: { filterBy: ["date"], warehouseId: [101, 102, 103], orderStatus: ["complet

我知道问题的标题不是很清楚和具体,但我真的不知道如何用几句话来描述它。这里有更多的故事

我想通过POST请求向ASP.NET4MVC控制器发送一个对象,希望它能绑定到一个C#模型。前端为角度1.5,对象未通过表单提交发送

我想寄什么

var model = {    
    id:1,
    filters: {
      filterBy: ["date"],
      warehouseId: [101, 102, 103],
      orderStatus: ["completed", "placed"],
      currencyId: [140, 209]
    }
}
C#模型看起来

public class FilterModel{
    public int Id { get; set; }
    public Dictionary<string, string[]> Filters { get; set; }
}
通过调试可以看出,当JS object value的数组只有一个元素时,我可以成功地得到一个字典结构,其中包含4条记录,即4个过滤器的键和值对

//Seudo code
{Key:"filterBy", Value: "date"}
{Key:"warehouseId", Value: "101"}
{Key:"orderStatus", Value: "completed"}
{Key:"currencyId", Value: "140"}
我可以通过以下方式获得值:

var warehouseId = model.Filters["warehouseId"][0] // 101
var orderStatus = model.Filters["orderStatus"][0] // completed
然而,当JS对象的数组有多个值时,奇怪的部分出现了。我将得到8条记录,而不是4条记录,如下所示:

//Seudo code
{Key:"filterBy", Value: "date"}
{Key:"warehouseId[0]", Value: "101"}
{Key:"warehouseId[1]", Value: "102"}
{Key:"warehouseId[2]", Value: "103"}
{Key:"orderStatus[0]", Value: "completed"}
{Key:"orderStatus[1]", Value: "placed"}
{Key:"currencyId[0]", Value: "140"}
{Key:"currencyId[1]", Value: "209"}
(如果描述不够清楚,请告诉我)

我想知道为什么会发生这种情况,以及如何解决它?我已经改为对每个筛选器键值对使用另一个模型,但仍然好奇这个问题的原因


感谢你的智慧

我认为你的模型错了。试试这个:

public class FilterModel
{
    [JsonProperty("id")]
    public long Id { get; set; }

    [JsonProperty("filters")]
    public Filters Filters { get; set; }
}

public class Filters
{
    [JsonProperty("filterBy")]
    public string[] FilterBy { get; set; }

    [JsonProperty("warehouseId")]
    public long[] WarehouseId { get; set; }

    [JsonProperty("orderStatus")]
    public string[] OrderStatus { get; set; }

    [JsonProperty("currencyId")]
    public long[] CurrencyId { get; set; }
}

希望对您有所帮助。

如果您希望以第一个代码段中的格式发送,则
过滤器
应该是一个包含4个集合属性的对象-例如
string[]filterBy
int[]warehouseId
等感谢您的回复。我已经找到了使用ViewModel(如您所写)的方法,但我想知道为什么模型绑定失败,因为C#model是Dictionary,我认为每个筛选器键值对都可以映射到Dictionary记录,因为Dictionary值类型也是string[]。你知道吗?我不敢相信我会因为使用字段而不是属性而卡住。非常感谢。
public class FilterModel
{
    [JsonProperty("id")]
    public long Id { get; set; }

    [JsonProperty("filters")]
    public Filters Filters { get; set; }
}

public class Filters
{
    [JsonProperty("filterBy")]
    public string[] FilterBy { get; set; }

    [JsonProperty("warehouseId")]
    public long[] WarehouseId { get; set; }

    [JsonProperty("orderStatus")]
    public string[] OrderStatus { get; set; }

    [JsonProperty("currencyId")]
    public long[] CurrencyId { get; set; }
}