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());
}
}
}
}