using JT808.Protocol.Extensions; using JT808.Protocol.Formatters; using JT808.Protocol.Interfaces; using JT808.Protocol.MessagePack; using System; using System.Text.Json; namespace JT808.Protocol.MessageBody { /// <summary> /// 电子运单上报 /// 0x0701 /// </summary> public class JT808_0x0701 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x0701>, IJT808Analyze { public override ushort MsgId { get; } = 0x0701; public override string Description => "电子运单上报"; /// <summary> /// 电子运单长度 /// </summary> public uint ElectronicWaybillLength { get; set; } public byte[] ElectronicContent { get; set; } /// <summary> /// 电子运单内容 /// 注意:需要具体的实现 /// </summary> public JT808_0x0701_CustomBodyBase ElectronicContentObj { get; set; } public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config) { JT808_0x0701 value = new JT808_0x0701(); value.ElectronicWaybillLength = reader.ReadUInt32(); writer.WriteNumber($"[{value.ElectronicWaybillLength.ReadNumber()}]电子运单长度", value.ElectronicWaybillLength); value.ElectronicContent = reader.ReadArray((int)value.ElectronicWaybillLength).ToArray(); writer.WriteString($"电子运单", value.ElectronicContent.ToHexString()); } public JT808_0x0701 Deserialize(ref JT808MessagePackReader reader, IJT808Config config) { JT808_0x0701 value = new JT808_0x0701(); value.ElectronicWaybillLength = reader.ReadUInt32(); value.ElectronicContent = reader.ReadArray((int)value.ElectronicWaybillLength).ToArray(); return value; } public void Serialize(ref JT808MessagePackWriter writer, JT808_0x0701 value, IJT808Config config) { writer.Skip(4, out int skipPosition); object obj = config.GetMessagePackFormatterByType(value.ElectronicContentObj.GetType()); JT808MessagePackFormatterResolverExtensions.JT808DynamicSerialize(obj, ref writer, value.ElectronicContentObj, config); int contentLength = writer.GetCurrentPosition() - skipPosition - 4; writer.WriteInt32Return(contentLength, skipPosition); } } }