我创建了一个从JsonConverter
扩展的自定义转换器,它将用于ASP.NET MVC和Web API。
public class MyCustomConverter : JsonConverter
{
public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
{
....
}
}
我创建了使用该转换器的CustomObject
:
[JsonConverter(typeof(MyCustomJsonConverter))]
public class CustomObject
{
...
}
此转换器可正常用于第二个应用程序(WebApi),这意味着ReadJson
中的TestOfUsingJson
方法在ReadJson
中调用后正在运行。在这种情况下,我没有必要设置任何东西。
对于第一个应用程序(ASP.NET MVC)我遇到了麻烦,对象是从json转换的,但是这个对象不是从我的自定义转换器创建的。 public HttpResponseMessage TestOfUsingJson([FromBody] CustomObject objs)
{
...
}
的方法未运行。
使用自定义转换器的方法在每个应用程序上看起来相同
Global.asax.cs
ASP.NET MVC JsonConvert.DefaultSettings = () => new JsonSerializerSettings
{
Converters = new List<JsonConverter> { new MyCustomJsonConverter() }
};
中的Json Serializer的一些设置:
{{1}}
我做错了什么?
答案 0 :(得分:0)
我准备了一些可能对某人有用的解决方案
创建绑定模型
public class BindJson : IModelBinder
{
public BindJson()
{
}
public virtual object BindModel(ControllerContext controllerContext, ModelBindingContext bindingContext)
{
if (controllerContext == null)
throw new SysException("Missing controller context");
if (!controllerContext.HttpContext.Request.ContentType.StartsWith("application/json", StringComparison.OrdinalIgnoreCase))
return null;
controllerContext.HttpContext.Request.InputStream.Position = 0;
using (var reader = new StreamReader(controllerContext.HttpContext.Request.InputStream))
{
var data = reader.ReadToEnd();
if (!String.IsNullOrEmpty(bodyText))
{
return JsonConvert.DeserializeObject(data, bindingContext.ModelType);
}
}
return null;
}
}
在Global.asax.cs中分配活页夹
..
ModelBinders.Binders.Add(typeof(BindJson), new BindJson());
..
将活页夹分配到班级
[ModelBinder(typeof(BindJson))]
public class CustomObject
{
...
}
在方法
中调用活页夹
public HttpResponseMessage TestOfUsingJson(CustomObject objs)
{
...
}