mvc4 webapi自定义特定类型的json序列化器

时间:2013-03-09 06:32:55

标签: asp.net-mvc json c#-4.0 deserialization json.net

我知道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;

此致 菲尔

1 个答案:

答案 0 :(得分:0)

这可以通过适当的覆盖

来解决
  1. 覆盖MVC Json类中的Controller个函数。 在此课程中,您可以自定义数据。 (用另一个映射, 用反思,......)

  2. 创建自定义JsonResult类,只需覆盖默认类。您 也可以覆盖那里的默认序列化 去那儿。

    现在:

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