You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

44 lines
1.6 KiB

  1. using JT808.Protocol.Extensions;
  2. using JT808.Protocol.Formatters;
  3. using JT808.Protocol.MessagePack;
  4. using System;
  5. namespace JT808.Protocol.MessageBody
  6. {
  7. /// <summary>
  8. /// 电子运单上报
  9. /// 0x0701
  10. /// </summary>
  11. public class JT808_0x0701 : JT808Bodies, IJT808MessagePackFormatter<JT808_0x0701>
  12. {
  13. /// <summary>
  14. /// 电子运单长度
  15. /// </summary>
  16. public uint ElectronicWaybillLength { get; set; }
  17. public byte[] ElectronicContent { get; set; }
  18. /// <summary>
  19. /// 电子运单内容
  20. /// 注意:需要具体的实现
  21. /// </summary>
  22. public JT808_0x0701_CustomBodyBase ElectronicContentObj { get; set; }
  23. public JT808_0x0701 Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
  24. {
  25. JT808_0x0701 jT808_0X0701 = new JT808_0x0701();
  26. jT808_0X0701.ElectronicWaybillLength = reader.ReadUInt32();
  27. jT808_0X0701.ElectronicContent = reader.ReadArray((int)jT808_0X0701.ElectronicWaybillLength).ToArray();
  28. return jT808_0X0701;
  29. }
  30. public void Serialize(ref JT808MessagePackWriter writer, JT808_0x0701 value, IJT808Config config)
  31. {
  32. writer.Skip(4, out int skipPosition);
  33. object obj = config.GetMessagePackFormatterByType(value.ElectronicContentObj.GetType());
  34. JT808MessagePackFormatterResolverExtensions.JT808DynamicSerialize(obj, ref writer, value.ElectronicContentObj, config);
  35. int contentLength = writer.GetCurrentPosition() - skipPosition - 4;
  36. writer.WriteInt32Return(contentLength, skipPosition);
  37. }
  38. }
  39. }