通过JSON将MV参数字典发送到MVC Controller

时间:2015-06-14 21:08:48

标签: javascript c# json asp.net-mvc dictionary

我使用第三方库并且无法真正改变将数据发布到MVC 5控制器的方式。

我无法弄清楚如何设置我的模型来接收数据。

json是一个跟随......

{
 "expiration":"2015-06-14T21:02:52.969Z",
 "conditions":[
   {"acl":"private"},
   {"bucket":"anyoldbucket"},
   {"Content-Type":"application/pdf"},
   {"success_action_status":"200"},
   {"key":"somekey"}
  ]
}

我尝试像这样设置我的模型......

public class AwsSignatureRequestViewModel
{
    public DateTime expiration { get; set; }
    public Dictionary<string, string> conditions { get; set; }
 }

到期日期已正确填写,我得到了正确数量的条件,但字典的键是数字(索引),值为空

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

如果您的模型是严格的,则需要为每个子对象创建对象。 但是如果你有一个动态模型,你可以从你的请求中读取原始字符串并用Json.net解析它。

public ActionResult Test(string model)
{
  Request.InputStream.Seek(0, SeekOrigin.Begin);
  string jsonData = new StreamReader(Request.InputStream).ReadToEnd();
  var dynamicObject = JObject.Parse(jsonData);
  ...
}

dynamicObject将包含所有json。

答案 1 :(得分:0)

IINM,根据您获得的数据,您的AwsSignatureRequestViewModel应如下所示:

public class AwsSignatureRequestViewModel
{
    public DateTime expiration { get; set; }
    public List<Dictionary<string, string>> conditions { get; set; }
}

conditions是一个“对象数组”。

您目前拥有模型的方式,数据会映射到类似的东西(事实并非如此):

{
  "expiration": "2015-06-14T21:02:52.969Z",
  "conditions": 
   {
      "acl": "private",
      "bucket": "anyoldbucket",
       ....
   },
   .....

... H个