我知道MVC4使用NewtonSoft Json反/序列化。我想知道如何在不使用 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;
问候 菲尔
最佳答案
这可以通过适当的覆盖来解决
重写 MVC
Controller
类中的Json
函数。 在此类中,您可以自定义数据。 (使用另一个映射, 通过反射,...)创建一个自定义 JsonResult 类,只需覆盖默认的类即可。你 还可以覆盖默认的序列化 在那里进行。
现在:
- 当您已有 JSON 时,可以排除此数据 序列化字符串...这将是最简单的选择。基本上只是字符串操作。
- 另一方面,您还可以调用自定义 NewtonSoft 序列化,你可以做任何你想做的事情......甚至使用自定义序列化。
关于asp.net-mvc - mvc4 webapi自定义特定类型的json序列化器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15308008/