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