Asp.net mvc 特定类型的mvc4 webapi自定义json序列化程序

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

我知道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;
    }
}
问候 Phil

这是可以通过适当的覆盖解决的
  • 重写MVC
    Controller
    类中的
    Json
    函数。 在这个类中,您可以自定义数据。(使用另一个映射, 带着沉思,…)

  • 创建一个自定义的JsonResult类,只需重写默认类即可 也可以覆盖默认的序列化,即 就在那里

    现在:

    • 如果已经有JSON,则可以排除此数据 序列化字符串…这将是最简单的选择。基本上只是字符串操作
    • 另一方面,您还可以调用自定义NewtonSoft 序列化,您可以在那里做任何您想做的事情…甚至可以使用自定义序列化

  • 谢谢Peter,但我正在使用WebApi,不想用JsonResult重新包装控制器库
    HttpConfiguration config = GlobalConfiguration.Configuration;
    JsonSerializerSettings serializerSetting = new JsonSerializerSettings
            {
                ContractResolver = new DynamicContractResolver(),
                ReferenceLoopHandling = ReferenceLoopHandling.Serialize
            };
    
    config.Formatters.JsonFormatter.SerializerSettings = serializerSetting;