C#教學 – 今次介紹的為Local Data的儲存, 當中的格式有Text, Json, XML, Binary, Custom (C# JsonSerializer, C# XmlSerializer, C# BinaryFormatter).
文字格式說明
- Json及XML為WEB最常使用的標準格式.
- Binary為把Data轉換為Binary的格式.
- Custom即Programmer自己定義的格式.
使用Binary , JSON及XML的好處
使用Binary , JSON及XML的好處在於能令檔案中的Data能普遍為不同的程式打開使用.
- JSON及XML容易被人所讀, 打開JSON及XML File後, 可作出即時更改.
- 而Binary 不容易被人所讀, 但坊間會有解讀器可破解.
- 而Custom的好處在於Programmer可以根據程式及自己的需要而定下一個Format, 一方面符合自己的SOFTWARE使用, 另一方面令DATA難以為其他程式所宜接取讀, 對於開發SOFTWARE後可增加其他程式Convert的難度.
而對我來說, 我會在一些可以公開, Share的資料使用Json及XML Format (當然在有些情況下會ENCRYPT, 因為不想公開); 在一些不想直接被打開下就讀到, 會用Binary. 在App 用 Local Cache的情況下用SqlLite, 因為有些Cache需要查找及保密; 而所有資料特別是重要的資料會用SQL SERVER等作中心化儲存. 另外, LOG也會用TEXT FILE存等.
那現在就開始了, Let’s Code!
Json |
using System.Text.Json; using System.Text.Json.Serialization; public class Student{ public string studentId{get;set;} public string studentName{get;set;} } var students = new List<Student>{ ……. }; //轉化為JSON string jsonString = JsonSerializer.Serialize(students); //轉化為Instance List<Student> students = JsonSerializer.Deserialize<List<Student>>(jsonString); |
XML |
public class Student{ public string studentId{get;set;} public string studentName{get;set;} } var students = new List<Student>{ ……. }; //轉化為XML XmlSerializer KeySerializer = new XmlSerializer(typeof(Student)); const str = s.serializeToString(students); //轉化為Instance using (TextReader reader = new StringReader( str)) { var dtoResult = serilizer.Deserialize( reader ) as Student;} |
Binary |
public class Student{ public string studentId{get;set;} public string studentName{get;set;} } var students = new List<Student>{ ……. }; //轉化為Binary using (var stream = new MemoryStream()){ var formatter = new BinaryFormatter(); formatter.Serialize(stream, students); stream.Flush(); stream.Position = 0; return Convert.ToBase64String(stream.ToArray()); } //轉化為Instance byte[] b = Convert.FromBase64String(students); using (var stream = new MemoryStream(b)){ var formatter = new BinaryFormatter(); stream.Seek(0, SeekOrigin.Begin); return (Student)formatter.Deserialize(stream); } |