繁体   English   中英

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

[英]json object containing array maps to asp.net dictionary

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

我想通过POST请求将对象发送到ASP.NET 4 MVC控制器,并希望它将绑定到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; }
}

控制器功能如下所示:

[HttpPost]
public ActionResult Export(FilterModel model){
    //....
}

通过调试,我可以看到,当JS对象值的数组只有一个元素时,我可以成功地获得一个包含4条记录的Dictionary结构,这是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对象的数组具有多个值时,就会出现怪异的部分。 而不是4条记录,我将获得8条记录,如下所示:

//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; }
}

希望对您有所帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM