Browse Source

解决8103自定义协议未能注册的情况下,导致协议解析报错

tags/v2.4.1
waterliu99 3 years ago
parent
commit
9141e72e1b
2 changed files with 23 additions and 1 deletions
  1. +16
    -0
      src/JT808.Protocol.Test/MessageBody/JT808_0x0104Test.cs
  2. +7
    -1
      src/JT808.Protocol/MessageBody/JT808_0x0104.cs

+ 16
- 0
src/JT808.Protocol.Test/MessageBody/JT808_0x0104Test.cs View File

@@ -143,5 +143,21 @@ namespace JT808.Protocol.Test.MessageBody
} }
} }
} }
[Fact]
public void Test2_2()
{
byte[] bytes = "7E010400C604052458039503D800020100000077BE09010101002D1400000064000500141400000320001F020101002D0F00000064000500191900000840001F030101002D0F00000064000500191900000840001F040101002D0F00000064000500191900000840001F050101002D0F00000064010500191900000840001F060101002D0F00000064000500191900000840001F070101002D0F000000640103001919000004CE001F080101002D0F00000064000500191900000840001F090101000F0F000000C8010500191900000400001F127E".ToHexBytes();
JT808Package jT808_0X8104 = JT808Serializer.Deserialize<JT808Package>(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);


}
} }
} }

+ 7
- 1
src/JT808.Protocol/MessageBody/JT808_0x0104.cs View File

@@ -57,9 +57,15 @@ namespace JT808.Protocol.MessageBody
} }
else else
{ {
jT808_0x0104.ParamList = new List<JT808_0x8103_BodyBase> { JT808MessagePackFormatterResolverExtensions.JT808DynamicDeserialize(instance, ref reader, config) };
jT808_0x0104.ParamList = new List<JT808_0x8103_BodyBase> { JT808MessagePackFormatterResolverExtensions.JT808DynamicDeserialize(instance, ref reader, config) };
} }
} }
else {
//对于未能解析的自定义项,过滤其长度,以保证后续解析正常
reader.Skip(4);//跳过参数id长度
var len = reader.ReadByte();//获取协议长度
reader.Skip(len);//跳过协议内容
}
} }
return jT808_0x0104; return jT808_0x0104;
} }


Loading…
Cancel
Save