你不知道C#只帶有 Get 訪問器的屬性是只讀屬性?
本文轉(zhuǎn)載自微信公眾號「UP技術(shù)控」,作者conan5566 。轉(zhuǎn)載本文請聯(lián)系UP技術(shù)控公眾號。
問題窺探
之前有個哥們在使用Newtonsoft.Json反序列化的時候,發(fā)現(xiàn)明明有數(shù)據(jù),但是就是序列化不出來數(shù)據(jù)到實(shí)體里面。
咋一看,確實(shí)沒什么問題啊,字符串的數(shù)據(jù)是存在的。那么問題出在哪里呢。
解決思路
1、我讓他把字符串復(fù)制出來,使用在線工具解析下,和實(shí)體對應(yīng)的名稱核對看下是否有出入。發(fā)現(xiàn)確實(shí)沒問題。
2、于是我讓他把實(shí)體文件發(fā)我下。
我查看了下,名稱確實(shí)沒問題。等等,這屬性 public ListData { get; }?
- /// <summary>
- /// 跟蹤信息頭
- /// </summary>
- public class O
- {
- /// <summary>
- /// 業(yè)務(wù)數(shù)據(jù)。
- /// </summary>
- [JsonProperty("data")]
- public List<TraceDto> Data { get; }
- /// <summary>
- /// 狀態(tài)。
- /// </summary>
- [JsonProperty("status")]
- public int Status { get; }
- ///// <summary>
- ///// 異常消息。
- ///// </summary>
- //[JsonProperty("msg")]
- //public string Message { get; }
- }
于是,我讓他這么干。
- { get; }=>{ get; set; }
問題解決。
總結(jié)
屬性按如下方式,根據(jù)所使用的訪問器進(jìn)行分類:
只帶有 get 訪問器的屬性稱為只讀屬性。無法對只讀屬性賦值。
只帶有 set 訪問器的屬性稱為只寫屬性。只寫屬性除作為賦值的目標(biāo)外,無法對其進(jìn)行引用。
同時帶有 get 和 set 訪問器的屬性為讀寫屬性。
在屬性聲明中,get 和 set 訪問器都必須在屬性體的內(nèi)部聲明。
使用 get 訪問器更改對象的狀態(tài)是一種錯誤的編程樣式。