Asp.net mvc 特定类型的mvc4 webapi自定义json序列化程序
我知道MVC4使用NewtonSoft Json反序列化。我想知道如何在不使用任何数据注释(如JsonIgnore/DataMemberIngore等)的情况下将序列化属性排除到客户端(程序集在其他地方使用,无法更改。我是否可以为特定对象类型实现自定义格式设置程序/JsonSerializerSettings/Dynamic ContractResolver等,然后过滤掉特定的属性名 非常感谢您的帮助 编辑。作为第一次尝试,提出了以下内容。如果有人有更优雅的解决方案,请让我知道Asp.net mvc 特定类型的mvc4 webapi自定义json序列化程序,asp.net-mvc,json,c#-4.0,deserialization,json.net,Asp.net Mvc,Json,C# 4.0,Deserialization,Json.net,我知道MVC4使用NewtonSoft Json反序列化。我想知道如何在不使用任何数据注释(如JsonIgnore/DataMemberIngore等)的情况下将序列化属性排除到客户端(程序集在其他地方使用,无法更改。我是否可以为特定对象类型实现自定义格式设置程序/JsonSerializerSettings/Dynamic ContractResolver等,然后过滤掉特定的属性名 非常感谢您的帮助 编辑。作为第一次尝试,提出了以下内容。如果有人有更优雅的解决方案,请让我知道 public c
public class DynamicContractResolver : DefaultContractResolver
{
public DynamicContractResolver()
{
}
protected override IList<JsonProperty> CreateProperties(Type type, Newtonsoft.Json.MemberSerialization memberSerialization)
{
IList<JsonProperty> properties = base.CreateProperties(type, Newtonsoft.Json.MemberSerialization.Fields);
if (type == typeof(SomeType))
{
var matchedProp = properties.Where(v=> v.PropertyName=="SomeProperty").FirstOrDefault();
if (matchedProp!=null)
{
properties.Remove(matchedProp);
}
}
return properties;
}
}
问候
Phil这是可以通过适当的覆盖解决的
Controller
类中的Json
函数。
在这个类中,您可以自定义数据。(使用另一个映射,
带着沉思,…)- 如果已经有JSON,则可以排除此数据 序列化字符串…这将是最简单的选择。基本上只是字符串操作
- 另一方面,您还可以调用自定义NewtonSoft 序列化,您可以在那里做任何您想做的事情…甚至可以使用自定义序列化
谢谢Peter,但我正在使用WebApi,不想用JsonResult重新包装控制器库
HttpConfiguration config = GlobalConfiguration.Configuration;
JsonSerializerSettings serializerSetting = new JsonSerializerSettings
{
ContractResolver = new DynamicContractResolver(),
ReferenceLoopHandling = ReferenceLoopHandling.Serialize
};
config.Formatters.JsonFormatter.SerializerSettings = serializerSetting;