Beispiel #1
0
        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()}");
            }
        }
Beispiel #2
0
        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);
        }