C# 将Json字典发布到控制器
我的jQuery文件中有以下代码C# 将Json字典发布到控制器,c#,jquery,ajax,json,model-view-controller,C#,Jquery,Ajax,Json,Model View Controller,我的jQuery文件中有以下代码 var bases = {}; for (var j = 0; j < selectedVariants.length; j++) { bases[selectedVariants[j].BId] = selectedVariants[j].CId; } 当我在控制器中看到。。。碱基计数为零 请帮我做这个 控制器: [HttpPost] public JsonResult Tflow(JsonFileContentInputs basedeta
var bases = {};
for (var j = 0; j < selectedVariants.length; j++) {
bases[selectedVariants[j].BId] = selectedVariants[j].CId;
}
当我在控制器中看到。。。碱基计数为零
请帮我做这个
控制器:
[HttpPost]
public JsonResult Tflow(JsonFileContentInputs basedetails)
{
//some code
}
我的模型是:
[ModelBinder(typeof(JsonModelBinder))]
[DataContract]
public class JsonFileContentInputs
{
[JsonProperty(PropertyName = "basedetails")]
[DataMember]
public Dictionary<string, string> basedetails { get; set; }
}
[ModelBinder(typeof(JsonModelBinder))]
[数据合同]
公共类JsonFileContentInputs
{
[JsonProperty(PropertyName=“basedetails”)]
[数据成员]
公共字典basedetails{get;set;}
}
您不应该接收类对象,而应该将其作为字符串接收,然后序列化为如下所示的对象
public JsonResult Tflow(string basedetails)
{
//some code
var model = new JavascriptSerializer().Deserialize<JsonFileContentInputs>(basedetails);
// Your code
}
publicjsonresult-Tflow(字符串basedetails)
{
//一些代码
var model=new JavascriptSerializer()。反序列化(basedetails);
//你的代码
}
您不应该接收类对象,而应该将其作为字符串接收,然后序列化为如下所示的对象
public JsonResult Tflow(string basedetails)
{
//some code
var model = new JavascriptSerializer().Deserialize<JsonFileContentInputs>(basedetails);
// Your code
}
publicjsonresult-Tflow(字符串basedetails)
{
//一些代码
var model=new JavascriptSerializer()。反序列化(basedetails);
//你的代码
}
您不应该接收类对象,而应该将其作为字符串接收,然后序列化为如下所示的对象
public JsonResult Tflow(string basedetails)
{
//some code
var model = new JavascriptSerializer().Deserialize<JsonFileContentInputs>(basedetails);
// Your code
}
publicjsonresult-Tflow(字符串basedetails)
{
//一些代码
var model=new JavascriptSerializer()。反序列化(basedetails);
//你的代码
}
您不应该接收类对象,而应该将其作为字符串接收,然后序列化为如下所示的对象
public JsonResult Tflow(string basedetails)
{
//some code
var model = new JavascriptSerializer().Deserialize<JsonFileContentInputs>(basedetails);
// Your code
}
publicjsonresult-Tflow(字符串basedetails)
{
//一些代码
var model=new JavascriptSerializer()。反序列化(basedetails);
//你的代码
}
尝试以下方法。如前所述,您需要调用所有数据,而不仅仅是base
对象:
$.ajax({
url: '/TUP/Tflow',
type: 'POST',
data: "json=" + JSON.stringify({baseDetails: bases}), // stringify everything,
dataType: 'text',
async: true,
cache: false
});
然后在您的控制器中,我们可以自己使用Json.NET反序列化数据,而不是尝试使用模型绑定
控制器:
[HttpPost]
public ActionResult Tflow(string json)
{
// deserialize
var data = JsonConvert.DeserializeObject<JsonFileContentInputs>(json);
// more code
}
[HttpPost]
公共操作结果Tflow(字符串json)
{
//反序列化
var data=JsonConvert.DeserializeObject(json);
//更多代码
}
型号:
// You can drop these two as we aren't using the modelbinding
// [ModelBinder(typeof(JsonModelBinder))]
// [DataContract]
public class JsonFileContentInputs
{
[JsonProperty(PropertyName = "baseDetails")]
public Dictionary<string, string> BaseDetails { get; set; }
}
//您可以删除这两个,因为我们不使用modelbinding
//[ModelBinder(typeof(JsonModelBinder))]
//[数据合同]
公共类JsonFileContentInputs
{
[JsonProperty(PropertyName=“baseDetails”)]
公共字典BaseDetails{get;set;}
}
不幸的是,在控制器中读取请求的原始流似乎是必要的,因为MVC控制器在默认情况下不能很好地处理原始JSON
编辑:看起来可以将原始JSON传递给MVC控制器,只需将ajax数据类型指定为
text
,并确保参数名称匹配即可。我已相应地更新了答案。尝试以下方法。如前所述,您需要调用所有数据,而不仅仅是base
对象:
$.ajax({
url: '/TUP/Tflow',
type: 'POST',
data: "json=" + JSON.stringify({baseDetails: bases}), // stringify everything,
dataType: 'text',
async: true,
cache: false
});
然后在您的控制器中,我们可以自己使用Json.NET反序列化数据,而不是尝试使用模型绑定
控制器:
[HttpPost]
public ActionResult Tflow(string json)
{
// deserialize
var data = JsonConvert.DeserializeObject<JsonFileContentInputs>(json);
// more code
}
[HttpPost]
公共操作结果Tflow(字符串json)
{
//反序列化
var data=JsonConvert.DeserializeObject(json);
//更多代码
}
型号:
// You can drop these two as we aren't using the modelbinding
// [ModelBinder(typeof(JsonModelBinder))]
// [DataContract]
public class JsonFileContentInputs
{
[JsonProperty(PropertyName = "baseDetails")]
public Dictionary<string, string> BaseDetails { get; set; }
}
//您可以删除这两个,因为我们不使用modelbinding
//[ModelBinder(typeof(JsonModelBinder))]
//[数据合同]
公共类JsonFileContentInputs
{
[JsonProperty(PropertyName=“baseDetails”)]
公共字典BaseDetails{get;set;}
}
不幸的是,在控制器中读取请求的原始流似乎是必要的,因为MVC控制器在默认情况下不能很好地处理原始JSON
编辑:看起来可以将原始JSON传递给MVC控制器,只需将ajax数据类型指定为
text
,并确保参数名称匹配即可。我已相应地更新了答案。尝试以下方法。如前所述,您需要调用所有数据,而不仅仅是base
对象:
$.ajax({
url: '/TUP/Tflow',
type: 'POST',
data: "json=" + JSON.stringify({baseDetails: bases}), // stringify everything,
dataType: 'text',
async: true,
cache: false
});
然后在您的控制器中,我们可以自己使用Json.NET反序列化数据,而不是尝试使用模型绑定
控制器:
[HttpPost]
public ActionResult Tflow(string json)
{
// deserialize
var data = JsonConvert.DeserializeObject<JsonFileContentInputs>(json);
// more code
}
[HttpPost]
公共操作结果Tflow(字符串json)
{
//反序列化
var data=JsonConvert.DeserializeObject(json);
//更多代码
}
型号:
// You can drop these two as we aren't using the modelbinding
// [ModelBinder(typeof(JsonModelBinder))]
// [DataContract]
public class JsonFileContentInputs
{
[JsonProperty(PropertyName = "baseDetails")]
public Dictionary<string, string> BaseDetails { get; set; }
}
//您可以删除这两个,因为我们不使用modelbinding
//[ModelBinder(typeof(JsonModelBinder))]
//[数据合同]
公共类JsonFileContentInputs
{
[JsonProperty(PropertyName=“baseDetails”)]
公共字典BaseDetails{get;set;}
}
不幸的是,在控制器中读取请求的原始流似乎是必要的,因为MVC控制器在默认情况下不能很好地处理原始JSON
编辑:看起来可以将原始JSON传递给MVC控制器,只需将ajax数据类型指定为
text
,并确保参数名称匹配即可。我已相应地更新了答案。尝试以下方法。如前所述,您需要调用所有数据,而不仅仅是base
对象:
$.ajax({
url: '/TUP/Tflow',
type: 'POST',
data: "json=" + JSON.stringify({baseDetails: bases}), // stringify everything,
dataType: 'text',
async: true,
cache: false
});
然后在您的控制器中,我们可以自己使用Json.NET反序列化数据,而不是尝试使用模型绑定
控制器:
[HttpPost]
public ActionResult Tflow(string json)
{
// deserialize
var data = JsonConvert.DeserializeObject<JsonFileContentInputs>(json);
// more code
}
[HttpPost]
公共操作结果Tflow(字符串json)
{
//反序列化
var data=JsonConvert.DeserializeObject(json);
//更多代码
}
型号:
// You can drop these two as we aren't using the modelbinding
// [ModelBinder(typeof(JsonModelBinder))]
// [DataContract]
public class JsonFileContentInputs
{
[JsonProperty(PropertyName = "baseDetails")]
public Dictionary<string, string> BaseDetails { get; set; }
}
//您可以删除这两个,因为我们不使用modelbinding
//[ModelBinder(typeof(JsonModelBinder))]
//[数据合同]
公共类JsonFileContentInputs
{
[JsonProperty(PropertyName=“baseDetails”)]
公共字典BaseDetails{get;set;}
}
不幸的是,在控制器中读取请求的原始流似乎是必要的,因为MVC控制器在默认情况下不能很好地处理原始JSON
编辑:看起来可以将原始JSON传递给MVC控制器,只需将ajax数据类型指定为text
,并确保参数名称匹配即可。我已经升级了