我知道MVC4使用NewtonSoft Json de / serialization。我想知道如何在序列化中将属性排除到客户端,而不使用任何数据注释,如JsonIgnore / DataMemberIngore等(程序集在别处使用,无法更改。我可以实现自定义格式化程序/ JsonSerializerSettings / Dynamic ContractResolver等特定对象类型然后筛选出特定的属性名称?
任何帮助都非常感激。
编辑。作为第一次尝试得到以下内容。如果有人有更优雅的解决方案,请告诉我......
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;
}
}
转向global.asax:
HttpConfiguration config = GlobalConfiguration.Configuration;
JsonSerializerSettings serializerSetting = new JsonSerializerSettings
{
ContractResolver = new DynamicContractResolver(),
ReferenceLoopHandling = ReferenceLoopHandling.Serialize
};
config.Formatters.JsonFormatter.SerializerSettings = serializerSetting;
此致 菲尔
答案 0 :(得分:0)
覆盖MVC Json
类中的Controller
个函数。
在此课程中,您可以自定义数据。 (用另一个映射,
用反思,......)
创建自定义JsonResult类,只需覆盖默认类。您 也可以覆盖那里的默认序列化 去那儿。
现在: