无需访问源代码即可控制ASP.NET WebAPI JSON序列化

时间:2014-03-24 12:53:39

标签: json asp.net-web-api

我正在使用ASP.NET WebAPI从程序集中返回一个我无法更改源代码的对象。

我想从响应中删除一个属性,但我不能简单地将[JsonIgnore]添加到该属性,因为我无法编辑我要返回的类。

有没有办法指定一个单独的属性忽略列表?

目前使用Ok()方法自动进行序列化:

return Ok(myObject);

1 个答案:

答案 0 :(得分:0)

您可以创建自定义Newtonsoft.Json.Serialization.IContractResolver以有条件地序列化属性。

有关Json.net在此空间中的支持的更多信息,您可以查看以下链接: http://james.newtonking.com/json/help/index.html?topic=html/ContractResolver.htm

config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new ShouldSerializeContractResolver();

public class ShouldSerializeContractResolver : System.Net.Formatting.JsonContractResolver
{
    public new static readonly ShouldSerializeContractResolver Instance = new ShouldSerializeContractResolver();

    protected override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
    {
        JsonProperty property = base.CreateProperty(member, memberSerialization);

        if (property.DeclaringType == typeof(Employee) && property.PropertyName == "Manager")
        {
            property.ShouldSerialize =
                instance =>
                {
                    Employee e = (Employee)instance;
                    return e.Manager != e;
                };
        }

        return property;
    }
}