.net——序列化与反序列化中对日期时间的处理
承接上篇,现在我在类中加入一个日期时间类型的字段:
public class Student { public string StudentId { get; set; } public string Name { get; set; } public int age { get; set; } public string Address { get; set; } public DateTime Birthday { get; set; } }
如果不对birthday这个类型处理的话,序列化之后就会出现这个问题:
{"Address":"北京朝阳区","Birthday":"\/Date(1434943392228+0800)\/","Name":"水田如雅","StudentId":"110","age":20}
现在我们在原来的方法上面进行一个改进:
public static class JsonConvert { /// <summary> /// Converts the obj to json. /// </summary> /// <typeparam name="T"></typeparam> /// <param name="t">The t.</param> /// <returns>System.String.</returns> /// <remarks>Editor:v-liuhch CreateTime:2015/6/21 21:40:55</remarks> public static string ConvertObjToJson<T>(T t) { DataContractJsonSerializer ser = new DataContractJsonSerializer(t.GetType()); try { using (MemoryStream ms=new MemoryStream()) { ser.WriteObject(ms,t); string strJson=Encoding.UTF8.GetString(ms.ToArray()); //替换Json的date字符串 string p = @"\\/Date\((\d+)\+\d+\)\\/"; MatchEvaluator matchEvaluator = new MatchEvaluator(ConvertJsonDataToDateString); Regex reg = new Regex(p); strJson = reg.Replace(strJson, matchEvaluator); return strJson; } } catch (IOException) { //自己处理异常吧 return null; } } /// <summary> /// Jsons the deserialize. /// </summary> /// <typeparam name="T"></typeparam> /// <param name="strJson">The STR json.</param> /// <returns>``0.</returns> /// <remarks>Editor:v-liuhch CreateTime:2015/6/21 21:46:37</remarks> public static T JsonDeserialize<T>(string strJson) where T:class //约束T为class,也可以放宽类型,这里只是个例子,写着玩儿的,欧巴们,此处可改 { DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T)); try { //将"yyyy-MM-dd HH:mm:ss"格式的字符串转为"\/Date(1294499956278+0800)\/"格式 string p = @"\d{4}-\d{2}-\d{2}\s\d{2}:\d{2}:\d{2}"; MatchEvaluator matchEvaluator = new MatchEvaluator(ConvertDateStringToJsonDate); Regex reg = new Regex(p); strJson = reg.Replace(strJson, matchEvaluator); using (MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(strJson))) { T obj = ser.ReadObject(ms) as T; return obj; } } catch (IOException e) { //自己处理异常吧 return null; } } /// <summary> /// Converts the json data to date string. /// </summary> /// <param name="m">The m.</param> /// <returns>System.String.</returns> /// <remarks>Editor:v-liuhch CreateTime:2015/6/22 11:39:18</remarks> private static string ConvertJsonDataToDateString(Match m) { string result = string.Empty; DateTime dt = new DateTime(1970, 1, 1); dt = dt.AddMilliseconds(long.Parse(m.Groups[1].Value)); dt = dt.ToLocalTime();//转换为本地时间 result = dt.ToString("yyyy-MM-dd HH:mm:ss"); return result; } /// <summary> /// Converts the date string to json date. /// </summary> /// <param name="m">The m.</param> /// <returns>System.String.</returns> /// <remarks>Editor:v-liuhch CreateTime:2015/6/22 11:39:15</remarks> private static string ConvertDateStringToJsonDate(Match m) { string result = string.Empty; DateTime dt = DateTime.Parse(m.Groups[0].Value); dt = dt.ToUniversalTime(); TimeSpan ts = dt - DateTime.Parse("1970-01-01"); result = string.Format("\\/Date({0}+0800)\\/",ts.TotalMilliseconds); return result; } }
当然,在序列化的时候,我们可以不对日期时间做单独处理,拿到前台JS之后,再对数据进行一个整合过滤,这样,就不会固定死日期时间的返回格式,感觉这样比在后台处理好。
以上就是.net——序列化与反序列化中对日期时间的处理的内容,更多相关内容请关注PHP中文网(www.php.cn)!

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas











Perkembangan teknologi kecerdasan buatan (AI) sedang giat dijalankan hari ini, dan ia telah menunjukkan potensi dan pengaruh yang besar dalam pelbagai bidang. Hari ini Dayao akan berkongsi dengan anda 4 rangka kerja projek berkaitan LLM model AI sumber terbuka .NET, dengan harapan dapat memberi anda sedikit rujukan. https://github.com/YSGStudyHards/DotNetGuide/blob/main/docs/DotNet/DotNetProjectPicks.mdSemanticKernelSemanticKernel ialah kit pembangunan perisian sumber terbuka (SDK) yang direka untuk menyepadukan model bahasa besar (LLM) seperti OpenAI, Azure

Penyelesaian kepada kegagalan penyahserikatan PHP Semak data bersiri. Semak definisi kelas, semak log ralat, kemas kini versi PHP dan gunakan langkah keselamatan, dsb. Pengenalan terperinci: 1. Semak data bersiri terlebih dahulu sama ada data bersiri itu sah dan mematuhi spesifikasi bersiri PHP Jika data rosak atau mempunyai format yang salah, anda boleh cuba membaikinya atau memulihkan data yang betul daripada sandaran. 2. Semak definisi Kelas, pastikan semua kelas yang digunakan dalam data bersiri wujud dan boleh dimuatkan secara automatik Jika kelas tidak wujud atau tidak boleh diakses, anda boleh cuba membaiki definisi kelas, dsb.

Sama ada anda seorang pemula atau profesional yang berpengalaman, menguasai C# akan membuka jalan untuk kerjaya anda.

Kemahiran pemprosesan data PHP: Cara menggunakan fungsi bersiri dan menyahsiri untuk melaksanakan pensirilan data dan penyahseririan Pensirilan dan penyahsiriran ialah salah satu kemahiran pemprosesan data yang biasa digunakan dalam sains komputer. Dalam PHP, kita boleh menggunakan fungsi serialize() dan unserialize() untuk melaksanakan operasi bersiri dan penyahserikan data. Artikel ini akan memberi anda pengenalan terperinci tentang cara menggunakan kedua-dua fungsi ini dan memberikan contoh kod yang berkaitan. 1. Apakah yang dimaksudkan dengan serialisasi dan deserialisasi dalam pengaturcaraan komputer?

Flexjson ialah perpustakaan ringan untuk mensiri dan menyahsiri objek Java ke dan dari format JSON. Kita boleh menyusun senarai objek menggunakan kaedah serialize() kelas JSONSerializer. Kaedah ini melakukan serialisasi cetek pada contoh sasaran. Kita perlu menghantar senarai objek jenis senarai sebagai parameter kepada kaedah serialize(). Contoh sintaks publicStringserialize(Objecttarget) importflexjson.JSONSerializer;importjava.util.*;publicclassJsonSerial

Panduan Pensirilan dan Penyahserikatan Perpustakaan C++ Pensirian: Mencipta aliran output dan menukarnya kepada format arkib. Mensiri objek ke dalam arkib. Penyahserialisasian: Mencipta aliran input dan memulihkannya daripada format arkib. Nyahserialisasi objek daripada arkib. Contoh praktikal: Serialisasi: Mencipta aliran keluaran. Buat objek arkib. Cipta dan sirikan objek ke dalam arkib. Penyahserikatan: Buat aliran input. Buat objek arkib. Cipta objek dan deserialisasikannya daripada arkib.

Kesan siri pada prestasi Java: Proses siri bergantung pada refleksi, yang akan menjejaskan prestasi dengan ketara. Serialisasi memerlukan penciptaan aliran bait untuk menyimpan data objek, mengakibatkan peruntukan memori dan kos pemprosesan. Mensiri objek besar menggunakan banyak memori dan masa. Objek bersiri meningkatkan beban apabila dihantar melalui rangkaian.

@JsonPropertyOrder ialah anotasi yang digunakan pada peringkat kelas. Ia mengambil sebagai atribut senarai medan yang mentakrifkan susunan medan muncul dalam rentetan yang dijana oleh siri JSON objek. Sifat yang disertakan dalam pengisytiharan anotasi boleh disirikan terlebih dahulu (mengikut susunan ia ditakrifkan), diikuti oleh mana-mana sifat yang tidak termasuk dalam definisi. Contoh sintaks public@interfaceJsonPropertyOrder importcom.fasterxml.jackson.core.*;importcom.fasterxml.jackson.databind.*;importcom.fasterxml.jac
