通过JSON向MVC控制器发送javascript参数字典

通过JSON向MVC控制器发送javascript参数字典,javascript,c#,json,asp.net-mvc,dictionary,Javascript,C#,Json,Asp.net Mvc,Dictionary,我使用的是第三方库,无法真正改变它将数据发布到MVC5控制器的方式 我不知道如何设置我的模型来接收数据 json是一个 { "expiration":"2015-06-14T21:02:52.969Z", "conditions":[ {"acl":"private"}, {"bucket":"anyoldbucket"}, {"Content-Type":"application/pdf"}, {"success_action_status":"200"},

我使用的是第三方库,无法真正改变它将数据发布到MVC5控制器的方式

我不知道如何设置我的模型来接收数据

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; }
 }
公共类AwsSignatureRequestViewModel
{
公共日期时间过期{get;set;}
公共字典条件{get;set;}
}
过期日期已正确填写,我得到了正确数量的条件,但字典的键是数字(索引),值为空


有什么建议吗?

如果您的模型很严格,则需要为每个子对象创建对象。 但是如果你有一个动态模型,你可以从你的请求中读取原始字符串并用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。

如果您的模型是严格的,则需要为每个子对象创建对象。 但是如果你有一个动态模型,你可以从你的请求中读取原始字符串并用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。

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

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

Hth…

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

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


Hth…

您是否使用JSON.NET?您可能必须为条件创建单独的模型并添加关系。您是否使用JSON.NET?您可能必须为条件创建单独的模型并添加关系。您是否使用JSON.NET?您可能必须为条件创建单独的模型并添加关系。这确实有效,但下面由Demonia提供的解决方案更适合我的用例,因为我可以得到一个包含我需要的结果的词典,而不是一系列词典,谢谢though@PhilipHey当然,只要管用就行。尽管这取决于您的用例,但您甚至可能不需要使用
控制器
,因为在一天结束时,您真正需要的只是获取请求流数据(而不是通过某种“模型”)。Hth..这确实有效,但是Demonia下面的解决方案对我的用例更有效,因为我可以得到一个包含我需要的结果的字典,而不是一个字典数组,谢谢though@PhilipHey当然,只要管用就行。尽管这取决于您的用例,但您甚至可能不需要使用
控制器
,因为在一天结束时,您真正需要的只是获取请求流数据(而不是通过某种“模型”)。Hth..这确实有效,但是Demonia下面的解决方案对我的用例更有效,因为我可以得到一个包含我需要的结果的字典,而不是一个字典数组,谢谢though@PhilipHey当然,只要管用就行。尽管这取决于您的用例,但您甚至可能不需要使用
控制器
,因为在一天结束时,您真正需要的只是获取请求流数据(而不是通过某种“模型”)。谢谢,我可以添加这一行来将数据输入到我的模型中。var model=dynamicObject.ToObject();是的,很抱歉,我忘记将代码行转换为您的模型。谢谢,我能够添加这一行以将数据获取到我的模型中。var model=dynamicObject.ToObject();是的,很抱歉,我忘记将代码行转换为您的模型。谢谢,我能够添加这一行以将数据获取到我的模型中。var model=dynamicObject.ToObject();是的,对不起,我忘了把代码行转换成你的模型。