.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"

我应该用别的东西吗?

谢谢你的帮助

.net发送通用对象(不一定是json)

问题在于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;
        }
    }