專案使用 Newtonsoft.Json 解析簡單 JSON 字串:
string jsonText = "{'name':'test','phone':'18888888888'}";
JObject jo = (JObject)JsonConvert.DeserializeObject(jsonText);
string name = jo["name"].ToString(); // 預期 "test",實際得到 "\"test\""
string phone = jo["phone"].ToString(); // 預期 "18888888888",實際得到 "\"18888888888\""
取出的值竟然包含雙引號,導致後續比對、存儲全數失敗。
jo["name"].Value<string>()、(string)jo["name"] 皆同樣帶引號。Net20 版組件在 .NET 4.0 執行時,內部字串處理行為與 4.0 版組件不一致,導致 JToken.ToString() 輸出包含引號的 JSON 字面值,而非純字串值。這是已知的跨版本相容性缺陷。
ToString() 回傳純字串 "test"、"18888888888"。(string)jToken 或 jToken.Value<string>() 取值,語意更清晰且不受 ToString() 重寫影響。一個「多出雙引號」的詭異 Bug,最終歸因於**組件目標框架與執行環境不匹配**。開發時請養成「版本對齊」習慣,能省去無數無效除錯時間。