diff --git a/src/JT808.Protocol.Test/MessageBody/JT808_0x0104Test.cs b/src/JT808.Protocol.Test/MessageBody/JT808_0x0104Test.cs index 4167e1f..234eac7 100644 --- a/src/JT808.Protocol.Test/MessageBody/JT808_0x0104Test.cs +++ b/src/JT808.Protocol.Test/MessageBody/JT808_0x0104Test.cs @@ -143,5 +143,21 @@ namespace JT808.Protocol.Test.MessageBody } } } + [Fact] + public void Test2_2() + { + byte[] bytes = "7E010400C604052458039503D800020100000077BE09010101002D1400000064000500141400000320001F020101002D0F00000064000500191900000840001F030101002D0F00000064000500191900000840001F040101002D0F00000064000500191900000840001F050101002D0F00000064010500191900000840001F060101002D0F00000064000500191900000840001F070101002D0F000000640103001919000004CE001F080101002D0F00000064000500191900000840001F090101000F0F000000C8010500191900000400001F127E".ToHexBytes(); + JT808Package jT808_0X8104 = JT808Serializer.Deserialize(bytes); + Assert.Equal(Enums.JT808MsgId.查询终端参数应答.ToUInt16Value(), jT808_0X8104.Header.MsgId); + Assert.Equal(0x03d8, jT808_0X8104.Header.MsgNum); + Assert.Equal("40524580395", jT808_0X8104.Header.TerminalPhoneNo); + + JT808_0x0104 JT808Bodies = (JT808_0x0104)jT808_0X8104.Bodies; + Assert.Equal(0x0002, JT808Bodies.MsgNum); + Assert.Equal(1, JT808Bodies.AnswerParamsCount); + Assert.Null(JT808Bodies.ParamList); + + + } } } \ No newline at end of file diff --git a/src/JT808.Protocol/MessageBody/JT808_0x0104.cs b/src/JT808.Protocol/MessageBody/JT808_0x0104.cs index e44803c..9c312e7 100644 --- a/src/JT808.Protocol/MessageBody/JT808_0x0104.cs +++ b/src/JT808.Protocol/MessageBody/JT808_0x0104.cs @@ -57,9 +57,15 @@ namespace JT808.Protocol.MessageBody } else { - jT808_0x0104.ParamList = new List { JT808MessagePackFormatterResolverExtensions.JT808DynamicDeserialize(instance, ref reader, config) }; + jT808_0x0104.ParamList = new List { JT808MessagePackFormatterResolverExtensions.JT808DynamicDeserialize(instance, ref reader, config) }; } } + else { + //对于未能解析的自定义项,过滤其长度,以保证后续解析正常 + reader.Skip(4);//跳过参数id长度 + var len = reader.ReadByte();//获取协议长度 + reader.Skip(len);//跳过协议内容 + } } return jT808_0x0104; }