public void Analyze(ref JT809MessagePackReader reader, Utf8JsonWriter writer, IJT809Config config) { JT809_0x9200 value = new JT809_0x9200(); //1078qq群808432702:大兄弟提供的 //由于车辆注册信息应答消息0x9201子业务不存在车牌号和颜色需要跳过 if (config.Version == JT809Version.JTT2019) { var subBusinessType = reader.ReadVirtualUInt16(); if (subBusinessType != JT809SubBusinessType.车辆注册信息应答消息.ToUInt16Value()) { var virtualHex = reader.ReadVirtualArray(21); value.VehicleNo = reader.ReadString(21); writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]车牌号", value.VehicleNo); value.VehicleColor = (JT809VehicleColorType)reader.ReadByte(); writer.WriteString($"[{value.VehicleColor.ToByteValue()}]车牌颜色", value.VehicleColor.ToString()); } } else { var virtualHex = reader.ReadVirtualArray(21); value.VehicleNo = reader.ReadString(21); writer.WriteString($"[{virtualHex.ToArray().ToHexString()}]车牌号", value.VehicleNo); value.VehicleColor = (JT809VehicleColorType)reader.ReadByte(); writer.WriteString($"[{value.VehicleColor.ToByteValue()}]车牌颜色", value.VehicleColor.ToString()); } value.SubBusinessType = reader.ReadUInt16(); writer.WriteString($"[{value.SubBusinessType.ReadNumber()}]子业务类型标识", ((JT809SubBusinessType)value.SubBusinessType).ToString()); value.DataLength = reader.ReadUInt32(); writer.WriteNumber($"[{value.DataLength.ReadNumber()}]后续数据长度", value.DataLength); try { if (config.SubBusinessTypeFactory.TryGetValue(value.SubBusinessType, out object instance)) { if (instance is JT809SubBodies subBodies) { if (!subBodies.SkipSerialization) { writer.WriteStartObject("子业务类型"); instance.Analyze(ref reader, writer, config); writer.WriteEndObject(); } } } } catch { throw new JT809Exception(JT809ErrorCode.SubBodiesParseError, $"SubBusinessType>{value.SubBusinessType.ToString()}"); } }
public JT809_0x9200 Deserialize(ref JT809MessagePackReader reader, IJT809Config config) { JT809_0x9200 value = new JT809_0x9200(); //1078qq群808432702:大兄弟提供的 //由于车辆注册信息应答消息0x9201子业务不存在车牌号和颜色需要跳过 if (config.Version == JT809Version.JTT2019) { var subBusinessType = reader.ReadVirtualUInt16(); if (subBusinessType != JT809SubBusinessType.车辆注册信息应答消息.ToUInt16Value()) { value.VehicleNo = reader.ReadString(21); value.VehicleColor = (JT809VehicleColorType)reader.ReadByte(); } } else { value.VehicleNo = reader.ReadString(21); value.VehicleColor = (JT809VehicleColorType)reader.ReadByte(); } value.SubBusinessType = reader.ReadUInt16(); value.DataLength = reader.ReadUInt32(); try { if (config.SubBusinessTypeFactory.TryGetValue(value.SubBusinessType, out object instance)) { if (instance is JT809SubBodies subBodies) { if (!subBodies.SkipSerialization) { value.SubBodies = JT809MessagePackFormatterResolverExtensions.JT809DynamicDeserialize( instance, ref reader, config); } } } } catch { throw new JT809Exception(JT809ErrorCode.SubBodiesParseError, $"SubBusinessType>{value.SubBusinessType.ToString()}"); } return(value); }