.net发送通用对象(不一定是json)
本文关键字:不一定 json 对象 net | 更新日期: 2023-09-27 18:16:35
我有一个mvc 4应用程序。在一个后的行动,我想有类型的"对象"的参数。它应该能够从客户端接受一个数字,一个字符串,也通用json。
我尝试用以下模型绑定器实现它:
public class ObjectModelBinder : DefaultModelBinder
{
public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
if (value == null || string.IsNullOrEmpty(value.AttemptedValue))
{
return null;
}
else
{
var js = new JavaScriptSerializer();
var result = js.Deserialize<object>((string)value.ConvertTo(typeof(string)));
return result;
}
}
}
在客户端,我使用jquery ajax发布数据,如果值是一个javascript对象,我使用JSON.stringify。
当我发送一个json或int它工作,但如果我尝试发送一个字符串它会抛出一个异常- "无效的json原语:THE_STRING_VALUE"
我应该用别的东西吗?
谢谢你的帮助
问题在于JSON 是字符串,因此您需要能够区分JSON字符串和非JSON字符串。试试这样做:
public override object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
var value = bindingContext.ValueProvider.GetValue(bindingContext.ModelName);
if (value == null || string.IsNullOrEmpty(value.AttemptedValue))
{
return null;
}
else
{
int n;
string s = (string)value.ConvertTo(typeof(string));
if (s.StartsWith("{") || s.StartsWith("["))
{
var js = new JavaScriptSerializer();
var result = js.Deserialize<object>(s);
return result;
}
else if (int.TryParse(s, out n))
{
return n;
}
return s;
}
}