Json มี 2 ค่าย หลัก ได้แก่ Newtonsoft กับ Microsoft
ในการใช้งาน จะมี Class Generator สำหรับ Json ที่
Quicktype.Io จะสร้าง Class สำหรับ Newtonsoft แต่จะไม่ compatible กับ Microsoft
ตัวที่ต้องระวัง คือ DateTime
ให้เปลี่ยนใน
Class เป็น String เช่น
public partial class CustomVisionJson
{
//[JsonProperty("id")]
public Guid id { get; set; }
//[JsonProperty("project")]
public Guid project { get; set; }
//[JsonProperty("iteration")]
public Guid iteration { get; set; }
//[JsonProperty("created")] // previous type is DateTimeOffset
public string created { get; set; }
// [JsonProperty("predictions")]
public Prediction [] predictions { get; set; }
}
การ Serialize และ DeSerialize ของ Microsoft
public static CaptureInfo FromJson(string json)
{
return doDeserialize(json, typeof(CaptureInfo)) as CaptureInfo;
}
public static string ConvertToJSON(object obj)
{
string s = doSerialize(obj);
return s;
}
public static string doSerialize(object obj)
{
using (MemoryStream memoryStream = new MemoryStream())
using (StreamReader reader = new StreamReader(memoryStream))
{
DataContractJsonSerializer serializer = new DataContractJsonSerializer(obj.GetType());
serializer.WriteObject(memoryStream, obj);
memoryStream.Position = 0;
return reader.ReadToEnd();
}
}
public static object doDeserialize(string xml, Type toType)
{
using (Stream stream = new MemoryStream())
{
byte[] data = System.Text.Encoding.UTF8.GetBytes(xml);
stream.Write(data, 0, data.Length);
stream.Position = 0;
DataContractJsonSerializer deserializer = new DataContractJsonSerializer(toType);
return deserializer.ReadObject(stream);
}
}
ของ Newtonsoft
public partial class CustomVisionJson
{
public static CustomVisionJson FromJson(string json) => JsonConvert.DeserializeObject<CustomVisionJson>(json, QuickType.Converter.Settings);
}
public static class Serialize
{
public static string ToJson(this CustomVisionJson self) => JsonConvert.SerializeObject(self, QuickType.Converter.Settings);
}
Newtonsoft จะง่าย กว่า แต่ข้อเสียคือจะ run ใน CS Script ไม่ได้