asp.net-mvc - mvc4 webapi自定义特定类型的json序列化器

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

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

问候 菲尔

最佳答案

这可以通过适当的覆盖来解决

  1. 重写 MVC Controller 类中的 Json 函数。 在此类中,您可以自定义数据。 (使用另一个映射, 通过反射,...)

  2. 创建一个自定义 JsonResult 类,只需覆盖默认的类即可。你 还可以覆盖默认的序列化 在那里进行。

    现在:

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

关于asp.net-mvc - mvc4 webapi自定义特定类型的json序列化器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15308008/

相关文章:

python - 在 Python 中访问嵌套 JSON 数据

javascript - 如何获取对象中包含的数组的长度?

asp.net-mvc-3 - 如何让 IIS Express 使用 64 位第 3 方 DLL 启动 MVC3 Web 应用程序

.net - 如果线程监听事件并且线程已中止,该事件会发生什么?

.net - 如何将Twitter时间戳转换为DateTime?

c# - 使用 JSONP 和 JQuery 调用 REST Api

c# - 以编程方式创建 iTunes Podcast RSS 提要

javascript - 模态弹出窗口的自动完成功能不起作用

php - 有没有更快的方法在 json 数组中搜索项目

asp.net-mvc - 如何在 MVC3 的自定义路由处理程序中指定命名空间?