本文转载自微信公众号「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 访问器更改对象的状态是一种错误的编程样式。