Melumpuhkan Penyahserialisasian Tarikh dalam Json.NET dengan JObject.Parse
Json.NET, pustaka pengendalian JSON yang popular, menawarkan pilihan penyahserilan yang fleksibel. Secara lalai, ia cuba menukar sifat dengan nilai DateTime kepada objek .NET DateTime. Walau bagaimanapun, dalam senario tertentu, tingkah laku ini mungkin tidak diingini.
Pertimbangkan kod berikut:
string s = "2012-08-08T01:54:45.3042880+00:00"; JObject j1 = JObject.FromObject(new { time = s }); Object o = j1["time"];
Dalam contoh ini, o ialah rentetan yang mengandungi nilai tarikh-masa asal. Walau bagaimanapun, jika rentetan JSON dipindahkan ke program lain dan dihuraikan kembali menggunakan JObject.Parse, hasilnya berubah.
JObject j2 = JObject.Parse(j1.ToString()); Object o2 = j2["time"];
Kini, o2 ialah objek Tarikh dengan perwakilan berbeza. Percanggahan ini boleh menimbulkan masalah dalam situasi di mana nilai asal perlu dikekalkan.
Penyelesaian
Untuk melumpuhkan penyahserikatan tarikh apabila menggunakan JObject.Parse, Json.NET menyediakan pendekatan alternatif. Daripada menggunakan Parse secara langsung, seseorang boleh menggunakan JsonReader untuk mengkonfigurasi pilihan penghuraian.
using(JsonReader reader = new JsonTextReader(new StringReader(j1.ToString()))) { reader.DateParseHandling = DateParseHandling.None; JObject o = JObject.Load(reader); }
Dengan menetapkan DateParseHandling kepada None sebelum memuatkan JSON ke dalam JObject, nilai tarikh-masa akan dianggap sebagai rentetan, mengekalkannya format asal.
Perhatikan bahawa penyelesaian ini bergantung pada kaedah Muatan dalaman JObject, iaitu dipanggil oleh Parse. Pendekatan ini menawarkan lebih kawalan ke atas proses penyahserikatan berbanding dengan tingkah laku lalai Parse.
Atas ialah kandungan terperinci Bagaimana untuk Mencegah Penyahserialisasian Tarikh dalam Json.NET's JObject.Parse?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!