C# object Serialize & Deserialize by JSON Format
static void Main(string[] args)
{
string oriString = "output";
//字串轉位元組陣列
byte[] oriArray = System.Text.Encoding.UTF8.GetBytes(oriString);
//檔案轉位元組陣列
byte[] bytePDF = System.IO.File.ReadAllBytes(@"C:\Users\p10154383\Downloads\output.pdf");
//將C#物件以JSON格式序列化為字串
PDFfile f = new PDFfile
{
FileName = "output",
CreatedDate = DateTime.Now,
FileSize = 560,
FileContent = bytePDF //FileContent屬性是byte[]型態
};
string serialized = JsonConvert.SerializeObject(f);//JSon.Net預設會把byte[]轉為Base64String
Console.WriteLine(serialized);
//作法1:JSON格式字串反序列化為C#物件(作法1:已知來源物件型態,直接JSON轉為來源物件,FileContent自動由Base64String轉回byte[])
var obj = JsonConvert.DeserializeObject<PDFfile>(serialized);
byte[] returnArray = obj.FileContent;
System.IO.File.WriteAllBytes(@"C:\Users\p10154383\Downloads\outputNew.pdf", returnArray);
//作法2:JSON格式字串反序列化為Json物件(作法2:未知來源物件型態,先轉JOBJECT,再抓JTOKEN內的值,還是Base64String)
JObject obj2 = JObject.Parse(serialized);
JToken jtBase64 = "";
if (obj2.TryGetValue("FileContent", out jtBase64)) //這時候,Base64 String尚未轉為byte[]
{
byte[] aryPDF = Convert.FromBase64String(jtBase64.Value<string>()); //Base64 String Convert to Byte[]
System.IO.File.WriteAllBytes(@"C:\Users\p10154383\Downloads\outputNew2.pdf", aryPDF);
}
var enums = obj2.GetValue("FileContent");
//Console.WriteLine(obj.FileContent);
Console.ReadKey();
}
using System;
namespace JsonToByteConvert
{
class PDFfile
{
public string FileName { get; set; }
public int FileSize { get; set; }
public DateTime CreatedDate { get; set; }
public byte[] FileContent { get; set; }
}
}
留言
張貼留言