C# 包含数组映射到asp.net字典的json对象
我知道问题的标题不是很清楚和具体,但我真的不知道如何用几句话来描述它。这里有更多的故事 我想通过POST请求向ASP.NET4MVC控制器发送一个对象,希望它能绑定到一个C#模型。前端为角度1.5,对象未通过表单提交发送 我想寄什么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
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; }
}