[Json.net]忽略不需要的字段

摘要

在序列化对象,总会遇到一些敏感的信息,这些信息,并不想对调用接口的用户暴露出来,又或者移动端调用接口的时候,为了不返回没用的信息占用流量,这个时候也需要把一些信息给过滤掉。

系列文章

[Json.net]快速入门

[Json.net]Linq to Json

一个例子

namespace Json.NetDemo
{
    class User
    {

        public string Name { set; get; }

        public string Pwd { set; get; }

        public DateTime Birthday { set; get; }
    }
    class Program
    {
        static void Main(string[] args)
        {
            Console.WriteLine(JsonConvert.SerializeObject(new User { Name = "wolfy", Pwd = "12334", Birthday = DateTime.Now }));
            Console.Read();
        }
    }
}

User类是一个再普通不过的一个类了。这个时候有其他的client需要调用接口查找该用户的信息。这个时候如果直接把序列化的结果返回,这个时候就会把pwd字段暴露给调用方。

Json.net有一些特性个作用在字段或者属性上面

JsonIgnoreAttribute

序列化的时候忽略字段或者属性

JsonPropertyAttribute

可以通过这个特性对字段进行重命名。

JsonConverterAttribute

指定序列化器。用于指派转换对象的JsonSerializer。这个特性可以修饰类或类成员。用于修饰类时,通过此特性指派的JsonConverter会被设置为序列化类的默认方式。用于修饰属性或域成员时,被指派的JsonConverter会序列化它们的值。

    class User
    {
        [JsonProperty("UserName")]
        public string Name { set; get; }
        [JsonIgnore]
        public string Pwd { set; get; }
        [JsonConverter(typeof(IsoDateTimeConverter))]
        public DateTime Birthday { set; get; }
    }

通过上面的特性改造user类

时间: 2024-10-29 09:41:58

[Json.net]忽略不需要的字段的相关文章

JS判断是否为JSON对象及是否存在某字段

$.ajax({ type: 'POST', url: url, success(function(data){ //判断是否为JSON对象 if(typeof(data) == "object" && Object.prototype.toString.call(data).toLowerCase() == "[object object]" && !data.length){ alert("is JSON 0bject&

JS推断是否为JSON对象及是否存在某字段

$.ajax({ type: 'POST', url: url, success(function(data){ //推断是否为JSON对象 if(typeof(data) == "object" && Object.prototype.toString.call(data).toLowerCase() == "[object object]" && !data.length){ alert("is JSON 0bject&

Java对象转换成Json字符串是无法获得对应字段名

问题: 代码中已经标注 @JSONField(name = "attrs") private String abc; public String getA() { return abc; } public void setA(String abc) { this.abc = abc; } 在发送消息的时候,会发现消息接受到的Json消息是abc对应的字段是a. 解决方法: 发现这个问题的时候,大概感觉应该是get和set函数名的为题,将其改成getAbc(),setAbc(),再发送消

GSON将Java对象转成JSON时,如何排除某些字段

GSON 是Google发布的 JSON 序列化/反序列化工具,非常容易使用.本文简要讨论在使用GSON将Java对象转成JSON时,如何排除某些字段. 最简单的用法 假设有下面这个类: 1 class MyObj { 2 3 public int x; 4 public int y; 5 6 public MyObj(int x, int y) { 7 this.x = x; 8 this.y = y; 9 } 10 } 最简单的GSON用法如下所示: @Test public void gs

Json.net 忽略实体某些属性的序列化

遇到了一个小问题有一个用户类,结构和数据库一模一样,里面包含用户密码,要向前台返回用户信息的json数据,但是不能输出密码这个字段.之前的做法是 重新又建了一个不包含这个字段的新类,然后深度复制,总感觉这中方式有点笨拙.受人启发么,想起来json.net中有一个 能控制被序列化为一个json对象中的属性的特性,就找找有没有能屏蔽实体属性的特性 果然 using Newtonsoft.Json; using Newtonsoft.Json.Converters; using System; usi

jackson反序列化时忽略不需要的字段

有时候,如果数据库表中增加一个字段,但返回的JSON字符串中含有我们并不需要的字段,那么当对应的实体类中不含有该字段时,会抛出一个异常,告诉你有些字段没有在实体类中找到.解决办法很简单,在声明ObjectMapper之后,加上上述代码: objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

Newtonsoft.Json同时对多个时间字段以不同的格式序列化

在博客园潜水多年,学到很多,也进步了很多,在这里说声谢谢,是时候给园友分享一点自己的东西,希望和大家一起进步. 之前有个需求要对一张表的多个时间字段进行不同的格式序列化, 在网上没找到相对较好的解决方案 就自己花了点时间研究了下,封装了下IsoDateTimeConverter这个类得以实现 不多说直接上源码 1 using Newtonsoft.Json.Converters; 2 using System; 3 using System.Collections.Generic; 4 usin

Spring MVC灵活控制返回json的值(自定义过滤字段)

在使用spring MVC开发过程中,为了提高项目执行效率,所以在一些外键字段的实体中会注解"@ManyToOne(fetch = FetchType.LAZY)"以实现延迟加载的效果. 但是,在使用ajax请求数据,当需要返回的序列化数据中包含延迟加载的属性时,会出现错误,延迟加载的属性无法进行序列化.在这个时候,我们需要暂时取消延迟加载,以取到所有需要的数据. 可是,这样又会造成一堆垃圾数据的产生.序列化.传递至前台. 所以需要在控制层进行数据过滤,只序列化需要的数据. 具体过滤方

vue中的axios.post使用json数据传输,出现请求头字段内容类型是不被允许的情况的解决方案

问题描述: 由于restful接口需要在头部header传递两个字段: Content-Type: application/jsonAccess-Token: 84c6635800b14e0eba4f7ece65e095a1 但是,在vue.js里面配置: 执行发送的时候出现: 意思是预发请求的时候不通过,不再正式发请求 经过反复的测试,发现,header里面包含自定义字段,浏览器是会先发一次options请求,如果请求通过,则继续发送正式的post请求,而如果不通过则返回以上错误 那这样就只能