case1、
private int displayMode = 0;
public int DisplayMode { set => _displayMode = value; get => _displayMode; }
case2、
private string overEntityId = "";
public string OverEntityId
{
get { return overEntityId; }
}
兩者在 Newtonsoft.Jons、Utf8Jon 的差異
在序列化過程中,這兩種寫法有重要區別:
序列化行為差異:
1. Newtonsoft.Json (JsonConvert)
/ 方式1: 會序列化 _displayMode 私有字段(預設行為)private int _displayMode = 0;public int DisplayMode { set => _displayMode = value; get => _displayMode; }// 方式2: 會序列化 overEntityId 私有字段private string overEntityId = "";public string OverEntityId { get { return overEntityId; } }
預設都會序列化私有字段
兩種寫法在 Newtonsoft.Json 中沒有太大區別
2. Utf8Json
// 方式1: ❌ 無法序列化(沒有 backing field)private int _displayMode = 0;public int DisplayMode { set => _displayMode = value; get => _displayMode; }// 方式2: ❌ 無法序列化(只有 getter,沒有 setter)private string overEntityId = "";public string OverEntityId { get { return overEntityId; } }
兩種都無法正確序列化
Utf8Json 要求:
使用自動實現屬性
{ get; set; }必須有 getter 和 setter
3. 建議的正確寫法
如果要同時支持 Newtonsoft.Json 和 Utf8Json:
// ✅ 兩者都支持public int DisplayMode { get; set; } = 0;public string OverEntityId { get; set; } = "";
如果需要只讀屬性(在你的 Fsm_StageData.cs 中):
// 方式A: 使用私有 setter(可序列化)
public string OverEntityId { get; private set; } = "";// 方式B: 保留私有字段但添加 setter(Utf8Json 需要)private string overEntityId = "";public string OverEntityId{get => overEntityId;set => overEntityId = value; // 添加 setter}
留言
張貼留言