C# · 12月 21, 2021

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

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

系列文章<p style="margin-left: 30px;">

<p style="margin-left: 30px;">

一个例子 </span><span style=”color: #0000ff;”&gt;public</span> <span style=”color: #0000ff;”&gt;string</span> Name { <span style=”color: #0000ff;”&gt;set</span>; <span style=”color: #0000ff;”&gt;get</span><span style=”color: #000000;”&gt;; } </span><span style=”color: #0000ff;”&gt;public</span> <span style=”color: #0000ff;”&gt;string</span> Pwd { <span style=”color: #0000ff;”&gt;set</span>; <span style=”color: #0000ff;”&gt;get</span><span style=”color: #000000;”&gt;; } </span><span style=”color: #0000ff;”&gt;public</span> DateTime Birthday { <span style=”color: #0000ff;”&gt;set</span>; <span style=”color: #0000ff;”&gt;get</span><span style=”color: #000000;”&gt;; }}</span><span style=”color: #0000ff;”&gt;class</span><span style=”color: #000000;”&gt; Program{ </span><span style=”color: #0000ff;”&gt;static</span> <span style=”color: #0000ff;”&gt;void</span> Main(<span style=”color: #0000ff;”&gt;string</span><span style=”color: #000000;”&gt;[] args) { Console.WriteLine(JsonConvert.SerializeObject(</span><span style=”color: #0000ff;”&gt;new</span> User { Name = <span style=”color: #800000;”&gt;”</span><span style=”color: #800000;”&gt;wolfy</span><span style=”color: #800000;”&gt;”</span>,Pwd = <span style=”color: #800000;”&gt;”</span><span style=”color: #800000;”&gt;12334</span><span style=”color: #800000;”&gt;”</span>,Birthday =<span style=”color: #000000;”&gt; DateTime.<a href=”https://www.jb51.cc/tag/Now/” target=”_blank” class=”keywords”>Now</a> })); Console.Read(); }}

}

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

<p style="margin-left: 30px;">

<p style="margin-left: 30px;">Json.net有一些特性个作用在字段或者属性上面

<p style="margin-left: 30px;">JsonIgnoreAttribute

<p style="margin-left: 30px;">序列化的时候忽略字段或者属性

<p style="margin-left: 30px;">JsonPropertyAttribute

<p style="margin-left: 30px;">可以通过这个特性对字段进行重命名。

<p style="margin-left: 30px;">JsonConverterAttribute

<p style="margin-left: 30px;">指定序列化器。用于指派转换对象的JsonSerializer。这个特性可以修饰类或类成员。用于修饰类时,通过此特性指派的JsonConverter会被设置为序列化类的默认方式。用于修饰属性或域成员时,被指派的JsonConverter会序列化它们的值。

Name { ; Pwd { ; DateTime Birthday { ; <p style="margin-left: 30px;">通过上面的特性改造user类

<p style="margin-left: 30px;">