using Newtonsoft.Json; using System.Text; namespace AmrControl.ADS { /// /// TcModel的JSON转换器 /// 这个是把byte[]与ASCII字符串互转 /// public class TcModelArrayConverter : JsonConverter { public override bool CanConvert(Type objectType) { return objectType == typeof(byte[]); } /// /// 把json字符串转对象 /// /// /// /// /// /// /// public override object? ReadJson(JsonReader reader, Type objectType, object? existingValue, JsonSerializer serializer) { //todo,需要评估一下长度有没有影响,在结构体中限定了长度 string str = (string)reader.Value; if(str == null) { //返回一个空数组 //return new byte[12]; return null; } else { //byte[] chars = Encoding.ASCII.GetBytes(str); //byte[] bytes = new byte[12]; //if(chars.Length <= 12) //{ // Array.Copy(chars, bytes, chars.Length); //} //else //{ // Array.Copy(chars, bytes, 12); //} //return bytes; return Encoding.ASCII.GetBytes(str); } } /// /// 把对象转json字符串 /// /// /// /// /// public override void WriteJson(JsonWriter writer, object? Data, JsonSerializer serializer) { if(Data is byte[] bytes) { //判断非0的长度,0是字符串结尾 int index = 0; for (int i = 0; i < bytes.Length; i++) { if (bytes[index++] == 0) { break; } } writer.WriteValue(Encoding.ASCII.GetString(bytes,0,index).Trim()); } } } }