diff --git a/src/JT809.Protocol.Test/JT809MessageBody/JT809_0x1200Test.cs b/src/JT809.Protocol.Test/JT809MessageBody/JT809_0x1200Test.cs
index aeeb00b..754ebd6 100644
--- a/src/JT809.Protocol.Test/JT809MessageBody/JT809_0x1200Test.cs
+++ b/src/JT809.Protocol.Test/JT809MessageBody/JT809_0x1200Test.cs
@@ -43,7 +43,7 @@ namespace JT809.Protocol.Test.JT809MessageBody
             //00 00 00 00 00 00 00 42 3A 35 C7 31 31 31 31 31 31 31 31 
             //00 00 00 00 00 00 00 00 00 00 00 00 31 31 31 31 31 41 41 32 32 32 32 32 32 32 32 32 32 32 32
             //D4C1413132333435000000000000000000000000000112010000003D00000000000000423A35C700000000000000423A35C7313131313131313100000000000000000000000031313131314141323232323232323232323232
-            Assert.Equal("D4C1413132333435000000000000000000000000000112010000003D00000000000000423A35C700000000000000423A35C7313131313131313100000000000000000000000031313131314141323232323232323232323232", hex);
+            Assert.Equal("D4C1413132333435000000000000000000000000000112010000003D31313131313131313131003131313131313131313100313131313131313100000000000000000000000031313131314141323232323232323232323232", hex);
             //"D4 C1 41 31 32 33 34 35 00 00 00 00 00 00 00 00 00 00 00 00 00 01 12 01 00 00 00 3D 00 00 00 00 00 00 00 42 3A 35 C7 00 00 00 00 00 00 00 42 3A 35 C7 31 31 31 31 31 31 31 31 00 00 00 00 00 00 00 00 00 00 00 00 31 31 31 31 31 41 41 32 32 32 32 32 32 32 32 32 32 32 32"
             //"D4 C1 41 31 32 33 34 35 00 00 00 00 00 00 00 00 00 00 00 00 00 01 12 01 00 00 00 3D 00 00 00 00 00 00 00 42 3A 35 C7 00 00 00 00 00 00 00 42 3A 35 C7 31 31 31 31 31 31 31 31 00 00 00 00 00 00 00 00 00 00 00 00 31 31 31 31 31 61 61 32 32 32 32 32 32 32 32 32 32 32 32"
         }
@@ -51,7 +51,7 @@ namespace JT809.Protocol.Test.JT809MessageBody
         [Fact]
         public void Test2()
         {
-            var bytes = "D4 C1 41 31 32 33 34 35 00 00 00 00 00 00 00 00 00 00 00 00 00 01 12 01 00 00 00 3D 00 00 00 00 00 00 00 42 3A 35 C7 00 00 00 00 00 00 00 42 3A 35 C7 31 31 31 31 31 31 31 31 00 00 00 00 00 00 00 00 00 00 00 00 31 31 31 31 31 41 41 32 32 32 32 32 32 32 32 32 32 32 32".ToHexBytes();
+            var bytes = "D4C1413132333435000000000000000000000000000112010000003D31313131313131313131003131313131313131313100313131313131313100000000000000000000000031313131314141323232323232323232323232".ToHexBytes();
             JT809_0x1200 jT809_0X9001 = JT809Serializer.Deserialize<JT809_0x1200>(bytes);
             Assert.Equal("粤A12345", jT809_0X9001.VehicleNo);
             Assert.Equal(JT809VehicleColorType.蓝色, jT809_0X9001.VehicleColor);
@@ -84,13 +84,13 @@ namespace JT809.Protocol.Test.JT809MessageBody
             };
             jT809_0X1200.SubBodies = jT809_0X1200_0X1201;
             var hex = JT809_2019_Serializer.Serialize(jT809_0X1200).ToHexString();
-            Assert.Equal("D4C1413132333435000000000000000000000000000112010000006E00000000000000423A35C700000000000000423A35C731313131313131310000000000000000000000000000000000000000000031323334353637383900000000000031313131314141000000000000000000000000000000000000000000000000323232323232323232323232", hex);       
+            Assert.Equal("D4C1413132333435000000000000000000000000000112010000006E3131313131313131313100313131313131313131310031313131313131310000000000000000000000000000000000000000000031323334353637383900000000000031313131314141000000000000000000000000000000000000000000000032323232323232323232323200", hex);       
         }
 
         [Fact]
         public void Test_2019_2()
         {
-            var bytes = "D4C1413132333435000000000000000000000000000112010000006E00000000000000423A35C700000000000000423A35C731313131313131310000000000000000000000000000000000000000000031323334353637383900000000000031313131314141000000000000000000000000000000000000000000000000323232323232323232323232".ToHexBytes();
+            var bytes = "D4C1413132333435000000000000000000000000000112010000006E3131313131313131313100313131313131313131310031313131313131310000000000000000000000000000000000000000000031323334353637383900000000000031313131314141000000000000000000000000000000000000000000000032323232323232323232323200".ToHexBytes();
             JT809_0x1200 jT809_0X9001 = JT809_2019_Serializer.Deserialize<JT809_0x1200>(bytes);
             Assert.Equal("粤A12345", jT809_0X9001.VehicleNo);
             Assert.Equal(JT809VehicleColorType.蓝色, jT809_0X9001.VehicleColor);
diff --git a/src/JT809.Protocol.Test/JT809SubMessageBody/JT809_0x1200_0x1201Test.cs b/src/JT809.Protocol.Test/JT809SubMessageBody/JT809_0x1200_0x1201Test.cs
index 6c7cd04..45abc62 100644
--- a/src/JT809.Protocol.Test/JT809SubMessageBody/JT809_0x1200_0x1201Test.cs
+++ b/src/JT809.Protocol.Test/JT809SubMessageBody/JT809_0x1200_0x1201Test.cs
@@ -31,13 +31,13 @@ namespace JT809.Protocol.Test.JT809SubMessageBody
             };
             var hex = JT809Serializer.Serialize(jT809_0X1200_0X1201).ToHexString();
             //"00 00 00 00 00 00 00 42 3A 35 C7 00 00 00 00 00 00 00 42 3A 35 C7 31 31 31 31 31 31 31 31 00 00 00 00 00 00 00 00 00 00 00 00 31 31 31 31 31 41 41 32 32 32 32 32 32 32 32 32 32 32 32"
-            Assert.Equal("00000000000000423A35C700000000000000423A35C7313131313131313100000000000000000000000031313131314141323232323232323232323232",hex);
+            Assert.Equal("31313131313131313131003131313131313131313100313131313131313100000000000000000000000031313131314141323232323232323232323232", hex);
         }
 
         [Fact]
         public void Test2()
         {
-            var bytes = "00 00 00 00 00 00 00 42 3A 35 C7 00 00 00 00 00 00 00 42 3A 35 C7 31 31 31 31 31 31 31 31 00 00 00 00 00 00 00 00 00 00 00 00 31 31 31 31 31 41 41 32 32 32 32 32 32 32 32 32 32 32 32".ToHexBytes();
+            var bytes = "31313131313131313131003131313131313131313100313131313131313100000000000000000000000031313131314141323232323232323232323232".ToHexBytes();
             JT809_0x1200_0x1201 jT809_0X1200_0X1201 = JT809Serializer.Deserialize<JT809_0x1200_0x1201>(bytes);
             Assert.Equal("1111111111", jT809_0X1200_0X1201.PlateformId);
             Assert.Equal("1111111111", jT809_0X1200_0X1201.ProducerId);
@@ -59,13 +59,13 @@ namespace JT809.Protocol.Test.JT809SubMessageBody
                 IMIEId="123456789"
             };
             var hex = JT809_2019_Serializer.Serialize(jT809_0X1200_0X1201).ToHexString();
-            Assert.Equal("00000000000000423A35C700000000000000423A35C731313131313131310000000000000000000000000000000000000000000031323334353637383900000000000031313131314141000000000000000000000000000000000000000000000000323232323232323232323232", hex);
+            Assert.Equal("3131313131313131313100313131313131313131310031313131313131310000000000000000000000000000000000000000000031323334353637383900000000000031313131314141000000000000000000000000000000000000000000000032323232323232323232323200", hex);
         }
 
         [Fact]
         public void Test_2019_2()
         {
-            var bytes = "00000000000000423A35C700000000000000423A35C731313131313131310000000000000000000000000000000000000000000031323334353637383900000000000031313131314141000000000000000000000000000000000000000000000000323232323232323232323232".ToHexBytes();
+            var bytes = "3131313131313131313100313131313131313131310031313131313131310000000000000000000000000000000000000000000031323334353637383900000000000031313131314141000000000000000000000000000000000000000000000032323232323232323232323200".ToHexBytes();
             JT809_0x1200_0x1201 jT809_0X1200_0X1201 = JT809_2019_Serializer.Deserialize<JT809_0x1200_0x1201>(bytes);
             Assert.Equal("1111111111", jT809_0X1200_0X1201.PlateformId);
             Assert.Equal("1111111111", jT809_0X1200_0X1201.ProducerId);
diff --git a/src/JT809.Protocol.Test/JT809SubMessageBody/JT809_0x1200_0x1202Test.cs b/src/JT809.Protocol.Test/JT809SubMessageBody/JT809_0x1200_0x1202Test.cs
index 3353fbc..f10736b 100644
--- a/src/JT809.Protocol.Test/JT809SubMessageBody/JT809_0x1200_0x1202Test.cs
+++ b/src/JT809.Protocol.Test/JT809SubMessageBody/JT809_0x1200_0x1202Test.cs
@@ -22,6 +22,7 @@ namespace JT809.Protocol.Test.JT809SubMessageBody
         public void Test1()
         {
             JT809_0x1200_0x1202 jT809_0X1200_0X1202 = new JT809_0x1200_0x1202();
+            jT809_0X1200_0X1202.VehiclePosition = new Metadata.JT809VehiclePositionProperties();
             jT809_0X1200_0X1202.VehiclePosition.Day = 19;
             jT809_0X1200_0X1202.VehiclePosition.Month = 7;
             jT809_0X1200_0X1202.VehiclePosition.Year = 2012;
@@ -66,13 +67,33 @@ namespace JT809.Protocol.Test.JT809SubMessageBody
         [Fact]
         public void Test_2019_1()
         {
-            // todo:JT809VehiclePositionProperties_2019
+            JT809_0x1200_0x1202 jT809_0X1200_0X1202 = new JT809_0x1200_0x1202();
+            jT809_0X1200_0X1202.GNSSData = new Metadata.JT809VehiclePositionProperties_2019();
+            jT809_0X1200_0X1202.GNSSData.Encrypt = JT809_VehiclePositionEncrypt.已加密;
+            //jT809_0X1200_0X1202.GNSSData.GnssData = new byte[20];
+            jT809_0X1200_0X1202.GNSSData.PlatformId1 = "11111111111";
+            jT809_0X1200_0X1202.GNSSData.Alarm1 = 1;
+            jT809_0X1200_0X1202.GNSSData.PlatformId2 = "22222222222";
+            jT809_0X1200_0X1202.GNSSData.Alarm2 = 2;
+            jT809_0X1200_0X1202.GNSSData.PlatformId3 = "33333333333";
+            jT809_0X1200_0X1202.GNSSData.Alarm3 = 3;
+            var hex = JT809_2019_Serializer.Serialize(jT809_0X1200_0X1202).ToHexString();
+            Assert.Equal("0100000000313131313131313131313100000001323232323232323232323200000002333333333333333333333300000003", hex);
+
         }
 
         [Fact]
         public void Test_2019_2()
         {
-            // todo:JT809VehiclePositionProperties_2019
+            var bytes = "0100000000313131313131313131313100000001323232323232323232323200000002333333333333333333333300000003".ToHexBytes();
+            JT809_0x1200_0x1202 jT809_0X1200_0X1202 = JT809_2019_Serializer.Deserialize<JT809_0x1200_0x1202>(bytes);
+            Assert.Equal( JT809_VehiclePositionEncrypt.已加密, jT809_0X1200_0X1202.GNSSData.Encrypt);
+            Assert.Equal("11111111111", jT809_0X1200_0X1202.GNSSData.PlatformId1);
+            Assert.Equal(1u, jT809_0X1200_0X1202.GNSSData.Alarm1);
+            Assert.Equal("22222222222", jT809_0X1200_0X1202.GNSSData.PlatformId2);
+            Assert.Equal(2u, jT809_0X1200_0X1202.GNSSData.Alarm2);
+            Assert.Equal("33333333333", jT809_0X1200_0X1202.GNSSData.PlatformId3);
+            Assert.Equal(3u, jT809_0X1200_0X1202.GNSSData.Alarm3);
         }
 
     }
diff --git a/src/JT809.Protocol.Test/JT809SubMessageBody/JT809_0x1200_0x1203Test.cs b/src/JT809.Protocol.Test/JT809SubMessageBody/JT809_0x1200_0x1203Test.cs
index 263b10c..c5aaca9 100644
--- a/src/JT809.Protocol.Test/JT809SubMessageBody/JT809_0x1200_0x1203Test.cs
+++ b/src/JT809.Protocol.Test/JT809SubMessageBody/JT809_0x1200_0x1203Test.cs
@@ -7,12 +7,15 @@ using JT809.Protocol.Extensions;
 using JT809.Protocol.MessageBody;
 using JT809.Protocol.Exceptions;
 using JT809.Protocol.SubMessageBody;
+using JT809.Protocol.Enums;
+using JT809.Protocol.Internal;
 
 namespace JT809.Protocol.Test.JT809SubMessageBody
 {
     public class JT809_0x1200_0x1203Test
     {
         private JT809Serializer JT809Serializer = new JT809Serializer();
+        private JT809Serializer JT809_2019_Serializer = new JT809Serializer(new DefaultGlobalConfig() { Version = JT809Version.JTT2019 });
         [Fact]
         public void Test1()
         {
@@ -20,6 +23,7 @@ namespace JT809.Protocol.Test.JT809SubMessageBody
             jT809_0X1200_0X1203.GNSS = new List<JT809_0x1200_0x1202>();
 
             JT809_0x1200_0x1202 jT809_0X1200_0X1202_1 = new JT809_0x1200_0x1202();
+            jT809_0X1200_0X1202_1.VehiclePosition = new Metadata.JT809VehiclePositionProperties();
             jT809_0X1200_0X1202_1.VehiclePosition.Day = 19;
             jT809_0X1200_0X1202_1.VehiclePosition.Month = 7;
             jT809_0X1200_0X1202_1.VehiclePosition.Year = 2012;
@@ -37,6 +41,7 @@ namespace JT809.Protocol.Test.JT809SubMessageBody
             jT809_0X1200_0X1202_1.VehiclePosition.Alarm = 257;
 
             JT809_0x1200_0x1202 jT809_0X1200_0X1202_2 = new JT809_0x1200_0x1202();
+            jT809_0X1200_0X1202_2.VehiclePosition = new Metadata.JT809VehiclePositionProperties();
             jT809_0X1200_0X1202_2.VehiclePosition.Day = 19;
             jT809_0X1200_0X1202_2.VehiclePosition.Month = 7;
             jT809_0X1200_0X1202_2.VehiclePosition.Year = 2012;
@@ -54,6 +59,7 @@ namespace JT809.Protocol.Test.JT809SubMessageBody
             jT809_0X1200_0X1202_2.VehiclePosition.Alarm = 257;
 
             JT809_0x1200_0x1202 jT809_0X1200_0X1202_3 = new JT809_0x1200_0x1202();
+            jT809_0X1200_0X1202_3.VehiclePosition = new Metadata.JT809VehiclePositionProperties();
             jT809_0X1200_0X1202_3.VehiclePosition.Day = 19;
             jT809_0X1200_0X1202_3.VehiclePosition.Month = 7;
             jT809_0X1200_0X1202_3.VehiclePosition.Year = 2012;
@@ -134,5 +140,58 @@ namespace JT809.Protocol.Test.JT809SubMessageBody
             Assert.Equal((uint)3, jT809_0X1200_0X1203.GNSS[2].VehiclePosition.State);
             Assert.Equal((uint)257, jT809_0X1200_0X1203.GNSS[2].VehiclePosition.Alarm);
         }
+
+        [Fact]
+        public void Test_2019_1()
+        {
+            JT809_0x1200_0x1203 jT809_0X1200_0X1203 = new JT809_0x1200_0x1203();
+            jT809_0X1200_0X1203.GNSS = new List<JT809_0x1200_0x1202>();
+            JT809_0x1200_0x1202 jT809_0X1200_0X1202 = new JT809_0x1200_0x1202();
+            jT809_0X1200_0X1202.GNSSData = new Metadata.JT809VehiclePositionProperties_2019();
+            jT809_0X1200_0X1202.GNSSData.Encrypt = JT809_VehiclePositionEncrypt.已加密;
+            //jT809_0X1200_0X1202.GNSSData.GnssData = new byte[20];
+            jT809_0X1200_0X1202.GNSSData.PlatformId1 = "11111111111";
+            jT809_0X1200_0X1202.GNSSData.Alarm1 = 1;
+            jT809_0X1200_0X1202.GNSSData.PlatformId2 = "22222222222";
+            jT809_0X1200_0X1202.GNSSData.Alarm2 = 2;
+            jT809_0X1200_0X1202.GNSSData.PlatformId3 = "33333333333";
+            jT809_0X1200_0X1202.GNSSData.Alarm3 = 3;
+            jT809_0X1200_0X1203.GNSS.Add(jT809_0X1200_0X1202);
+            JT809_0x1200_0x1202 jT809_0X1200_0X1202_1 = new JT809_0x1200_0x1202();
+            jT809_0X1200_0X1202_1.GNSSData = new Metadata.JT809VehiclePositionProperties_2019();
+            jT809_0X1200_0X1202_1.GNSSData.Encrypt = JT809_VehiclePositionEncrypt.已加密;
+            jT809_0X1200_0X1202_1.GNSSData.PlatformId1 = "11111111111";
+            jT809_0X1200_0X1202_1.GNSSData.Alarm1 = 1;
+            jT809_0X1200_0X1202_1.GNSSData.PlatformId2 = "22222222222";
+            jT809_0X1200_0X1202_1.GNSSData.Alarm2 = 2;
+            jT809_0X1200_0X1202_1.GNSSData.PlatformId3 = "33333333333";
+            jT809_0X1200_0X1202_1.GNSSData.Alarm3 = 3;
+            jT809_0X1200_0X1203.GNSS.Add(jT809_0X1200_0X1202_1);
+            var hex = JT809_2019_Serializer.Serialize(jT809_0X1200_0X1203).ToHexString();
+            Assert.Equal("0201000000003131313131313131313131000000013232323232323232323232000000023333333333333333333333000000030100000000313131313131313131313100000001323232323232323232323200000002333333333333333333333300000003", hex);
+
+        }
+
+        [Fact]
+        public void Test_2019_2()
+        {
+            var bytes = "0201000000003131313131313131313131000000013232323232323232323232000000023333333333333333333333000000030100000000313131313131313131313100000001323232323232323232323200000002333333333333333333333300000003".ToHexBytes();
+            JT809_0x1200_0x1203 jT809_0X1200_0X1203 = JT809_2019_Serializer.Deserialize<JT809_0x1200_0x1203>(bytes);
+            Assert.Equal(JT809_VehiclePositionEncrypt.已加密, jT809_0X1200_0X1203.GNSS[0].GNSSData.Encrypt);
+            Assert.Equal("11111111111", jT809_0X1200_0X1203.GNSS[0].GNSSData.PlatformId1);
+            Assert.Equal(1u, jT809_0X1200_0X1203.GNSS[0].GNSSData.Alarm1);
+            Assert.Equal("22222222222", jT809_0X1200_0X1203.GNSS[0].GNSSData.PlatformId2);
+            Assert.Equal(2u, jT809_0X1200_0X1203.GNSS[0].GNSSData.Alarm2);
+            Assert.Equal("33333333333", jT809_0X1200_0X1203.GNSS[0].GNSSData.PlatformId3);
+            Assert.Equal(3u, jT809_0X1200_0X1203.GNSS[0].GNSSData.Alarm3);
+
+            Assert.Equal(JT809_VehiclePositionEncrypt.已加密, jT809_0X1200_0X1203.GNSS[1].GNSSData.Encrypt);
+            Assert.Equal("11111111111", jT809_0X1200_0X1203.GNSS[1].GNSSData.PlatformId1);
+            Assert.Equal(1u, jT809_0X1200_0X1203.GNSS[1].GNSSData.Alarm1);
+            Assert.Equal("22222222222", jT809_0X1200_0X1203.GNSS[1].GNSSData.PlatformId2);
+            Assert.Equal(2u, jT809_0X1200_0X1203.GNSS[1].GNSSData.Alarm2);
+            Assert.Equal("33333333333", jT809_0X1200_0X1203.GNSS[1].GNSSData.PlatformId3);
+            Assert.Equal(3u, jT809_0X1200_0X1203.GNSS[1].GNSSData.Alarm3);
+        }
     }
 }
diff --git a/src/JT809.Protocol.Test/JT809SubMessageBody/JT809_0x1400_0x1402Test.cs b/src/JT809.Protocol.Test/JT809SubMessageBody/JT809_0x1400_0x1402Test.cs
index 8ab0509..717f9ae 100644
--- a/src/JT809.Protocol.Test/JT809SubMessageBody/JT809_0x1400_0x1402Test.cs
+++ b/src/JT809.Protocol.Test/JT809SubMessageBody/JT809_0x1400_0x1402Test.cs
@@ -50,26 +50,26 @@ namespace JT809.Protocol.Test.JT809SubMessageBody
         {
             JT809_0x1400_0x1402 jT809_0x1400_0x1402 = new JT809_0x1400_0x1402
             {
-                SourcePlatformId = "30313233343536373839",
+                SourcePlatformId = "12345678900",
                 WarnType = JT809WarnType.偏离路线报警,
                 WarnTime = DateTime.Parse("2020-04-23"),
                 StartTime= DateTime.Parse("2020-04-23"),
                 EndTime= DateTime.Parse("2020-04-24"),
                 VehicleNo="粤A11111",
                 VehicleColor= JT809VehicleColorType.蓝色,
-                DestinationPlatformId = "30313233343536373839",
+                DestinationPlatformId = "12345678900",
                 InfoContent = "gfdf454553",
             };
             var hex = JT809_2019_Serializer.Serialize(jT809_0x1400_0x1402).ToHexString();
-            Assert.Equal("0000000000000000000000000B000000005EA06A00000000005EA06A00000000005EA1BB80D4C141313131313100000000000000000000000000010000000000000000000000000000000000000A67666466343534353533", hex);
+            Assert.Equal("3132333435363738393030000B000000005EA06A00000000005EA06A00000000005EA1BB80D4C141313131313100000000000000000000000000013132333435363738393030000000000000000A67666466343534353533", hex);
         }
 
         [Fact]
         public void Test_2019_2()
         {
-            var bytes = "0000000000000000000000000B000000005EA06A00000000005EA06A00000000005EA1BB80D4C141313131313100000000000000000000000000010000000000000000000000000000000000000A67666466343534353533".ToHexBytes();
+            var bytes = "3132333435363738393030000B000000005EA06A00000000005EA06A00000000005EA1BB80D4C141313131313100000000000000000000000000013132333435363738393030000000000000000A67666466343534353533".ToHexBytes();
             JT809_0x1400_0x1402 jT809_0x1400_0x1402 = JT809_2019_Serializer.Deserialize<JT809_0x1400_0x1402>(bytes);
-            Assert.Equal("30313233343536373839", jT809_0x1400_0x1402.SourcePlatformId);
+            Assert.Equal("12345678900", jT809_0x1400_0x1402.SourcePlatformId);
             Assert.Equal("gfdf454553", jT809_0x1400_0x1402.InfoContent);
             Assert.Equal(JT809WarnType.偏离路线报警, jT809_0x1400_0x1402.WarnType);
             Assert.Equal((uint)10, jT809_0x1400_0x1402.InfoLength);
@@ -78,7 +78,7 @@ namespace JT809.Protocol.Test.JT809SubMessageBody
             Assert.Equal(DateTime.Parse("2020-04-24"), jT809_0x1400_0x1402.EndTime);
             Assert.Equal("粤A11111", jT809_0x1400_0x1402.VehicleNo);
             Assert.Equal(JT809VehicleColorType.蓝色, jT809_0x1400_0x1402.VehicleColor);
-            Assert.Equal("30313233343536373839", jT809_0x1400_0x1402.DestinationPlatformId);
+            Assert.Equal("12345678900", jT809_0x1400_0x1402.DestinationPlatformId);
         }
     }
 }
diff --git a/src/JT809.Protocol.Test/JT809SubMessageBody/JT809_0x1400_0x1403Test.cs b/src/JT809.Protocol.Test/JT809SubMessageBody/JT809_0x1400_0x1403Test.cs
index 6777c0f..f3658ac 100644
--- a/src/JT809.Protocol.Test/JT809SubMessageBody/JT809_0x1400_0x1403Test.cs
+++ b/src/JT809.Protocol.Test/JT809SubMessageBody/JT809_0x1400_0x1403Test.cs
@@ -43,27 +43,27 @@ namespace JT809.Protocol.Test.JT809SubMessageBody
         {
             JT809_0x1400_0x1403 jT809_0x1400_0x1403 = new JT809_0x1400_0x1403
             {
-                SourcePlatformId = "30313233343536373839",
+                SourcePlatformId = "12345678900",
                 WarnType = JT809WarnType.偏离路线报警,
                 WarnTime = DateTime.Parse("2020-04-23"),
                 StartTime = DateTime.Parse("2020-04-23"),
                 EndTime = DateTime.Parse("2020-04-24"),
                 VehicleNo = "粤A11111",
                 VehicleColor = JT809VehicleColorType.蓝色,
-                DestinationPlatformId = "30313233343536373839",
+                DestinationPlatformId = "12345678900",
                 InfoContent = "gfdf454553",
                 DRVLineId=55
             };
             var hex = JT809_2019_Serializer.Serialize(jT809_0x1400_0x1403).ToHexString();
-            Assert.Equal("0000000000000000000000000B000000005EA06A00000000005EA06A00000000005EA1BB80D4C141313131313100000000000000000000000000010000000000000000000000000000370000000A67666466343534353533", hex);
+            Assert.Equal("00000000000002DFDC1C34000B000000005EA06A00000000005EA06A00000000005EA1BB80D4C1413131313131000000000000000000000000000100000000000002DFDC1C34000000370000000A67666466343534353533", hex);
         }
 
         [Fact]
         public void Test_2019_2()
         {
-            var bytes = "0000000000000000000000000B000000005EA06A00000000005EA06A00000000005EA1BB80D4C141313131313100000000000000000000000000010000000000000000000000000000370000000A67666466343534353533".ToHexBytes();
+            var bytes = "00000000000002DFDC1C34000B000000005EA06A00000000005EA06A00000000005EA1BB80D4C1413131313131000000000000000000000000000100000000000002DFDC1C34000000370000000A67666466343534353533".ToHexBytes();
             JT809_0x1400_0x1403 jT809_0x1400_0x1403 = JT809_2019_Serializer.Deserialize<JT809_0x1400_0x1403>(bytes);
-            Assert.Equal("30313233343536373839", jT809_0x1400_0x1403.SourcePlatformId);
+            Assert.Equal("12345678900", jT809_0x1400_0x1403.SourcePlatformId);
             Assert.Equal("gfdf454553", jT809_0x1400_0x1403.InfoContent);
             Assert.Equal(JT809WarnType.偏离路线报警, jT809_0x1400_0x1403.WarnType);
             Assert.Equal((uint)10, jT809_0x1400_0x1403.InfoLength);
@@ -72,7 +72,7 @@ namespace JT809.Protocol.Test.JT809SubMessageBody
             Assert.Equal(DateTime.Parse("2020-04-24"), jT809_0x1400_0x1403.EndTime);
             Assert.Equal("粤A11111", jT809_0x1400_0x1403.VehicleNo);
             Assert.Equal(JT809VehicleColorType.蓝色, jT809_0x1400_0x1403.VehicleColor);
-            Assert.Equal("30313233343536373839", jT809_0x1400_0x1403.DestinationPlatformId);
+            Assert.Equal("12345678900", jT809_0x1400_0x1403.DestinationPlatformId);
             Assert.Equal(55u, jT809_0x1400_0x1403.DRVLineId);
         }
     }
diff --git a/src/JT809.Protocol.Test/JT809SubMessageBody/JT809_0x9400_0x9402Test.cs b/src/JT809.Protocol.Test/JT809SubMessageBody/JT809_0x9400_0x9402Test.cs
index cb549ff..bbc0560 100644
--- a/src/JT809.Protocol.Test/JT809SubMessageBody/JT809_0x9400_0x9402Test.cs
+++ b/src/JT809.Protocol.Test/JT809SubMessageBody/JT809_0x9400_0x9402Test.cs
@@ -47,25 +47,25 @@ namespace JT809.Protocol.Test.JT809SubMessageBody
         {
             JT809_0x9400_0x9402 jT809_0x9400_0x9402 = new JT809_0x9400_0x9402
             {
-                SourcePlatformId = "30313233343536373839",
+                SourcePlatformId = "12345678901",
                 WarnType = JT809WarnType.劫警,
                 WarnTime = DateTime.Parse("2020-04-26 18:23:00"),
                 StartTime = DateTime.Parse("2020-04-26 18:23:00"),
                 EndTime = DateTime.Parse("2020-04-26 19:23:00"),
                 VehicleNo= "粤A12345",
                 VehicleColor= JT809VehicleColorType.蓝色,
-                DestinationPlatformId = "30313233343536373839",
+                DestinationPlatformId = "12345678901",
                 DRVLineId=22,
                 WarnContent = "劫警",
             };
             var hex = JT809_2019_Serializer.Serialize(jT809_0x9400_0x9402).ToHexString();
-            Assert.Equal("0000000000000000000000000A000000005EA56104000000005EA56104000000005EA56F14D4C1413132333435000000000000000000000000000100000000000000000000000000001600000004BDD9BEAF", hex);
+            Assert.Equal("00000000000002DFDC1C35000A000000005EA56104000000005EA56104000000005EA56F14D4C1413132333435000000000000000000000000000100000000000002DFDC1C350000001600000004BDD9BEAF", hex);
         }
 
         [Fact]
         public void Test_2019_2()
         {
-            var bytes = "0000000000000000000000000A000000005EA56104000000005EA56104000000005EA56F14D4C1413132333435000000000000000000000000000100000000000000000000000000001600000004BDD9BEAF".ToHexBytes();
+            var bytes = "00000000000002DFDC1C35000A000000005EA56104000000005EA56104000000005EA56F14D4C1413132333435000000000000000000000000000100000000000002DFDC1C350000001600000004BDD9BEAF".ToHexBytes();
             JT809_0x9400_0x9402 jT809_0x9400_0x9402 = JT809_2019_Serializer.Deserialize<JT809_0x9400_0x9402>(bytes);
             Assert.Equal(JT809WarnType.劫警, jT809_0x9400_0x9402.WarnType);
             Assert.Equal(DateTime.Parse("2020-04-26 18:23:00"), jT809_0x9400_0x9402.WarnTime);
@@ -74,8 +74,8 @@ namespace JT809.Protocol.Test.JT809SubMessageBody
             Assert.Equal(DateTime.Parse("2020-04-26 19:23:00"), jT809_0x9400_0x9402.EndTime);
             Assert.Equal("粤A12345", jT809_0x9400_0x9402.VehicleNo);
             Assert.Equal(JT809VehicleColorType.蓝色, jT809_0x9400_0x9402.VehicleColor);
-            Assert.Equal("30313233343536373839", jT809_0x9400_0x9402.DestinationPlatformId);
-            Assert.Equal("30313233343536373839", jT809_0x9400_0x9402.SourcePlatformId);
+            Assert.Equal("12345678901", jT809_0x9400_0x9402.DestinationPlatformId);
+            Assert.Equal("12345678901", jT809_0x9400_0x9402.SourcePlatformId);
             Assert.Equal(22u, jT809_0x9400_0x9402.DRVLineId);
             Assert.Equal(4u, jT809_0x9400_0x9402.WarnLength);
         }
diff --git a/src/JT809.Protocol.Test/JT809SubMessageBody/JT809_0x9400_0x9403Test.cs b/src/JT809.Protocol.Test/JT809SubMessageBody/JT809_0x9400_0x9403Test.cs
index ddcecff..428121f 100644
--- a/src/JT809.Protocol.Test/JT809SubMessageBody/JT809_0x9400_0x9403Test.cs
+++ b/src/JT809.Protocol.Test/JT809SubMessageBody/JT809_0x9400_0x9403Test.cs
@@ -47,24 +47,24 @@ namespace JT809.Protocol.Test.JT809SubMessageBody
         {
             JT809_0x9400_0x9403 jT809_0x9400_0x9403 = new JT809_0x9400_0x9403
             {
-                SourcePlatformId = "30313233343536373839",
+                SourcePlatformId = "12345678901",
                 WarnType = JT809WarnType.疲劳驾驶报警,
                 WarnTime = DateTime.Parse("2020-04-26 18:24:00"),
                 StartTime = DateTime.Parse("2020-04-26 18:24:00"),
                 EndTime = DateTime.Parse("2020-04-26 19:24:00"),
                 VehicleNo = "粤A5647",
                 VehicleColor =  JT809VehicleColorType.黄色,
-                DestinationPlatformId = "30313233343536373839",
+                DestinationPlatformId = "12345678901",
                 WarnContent = "疲劳驾驶报警",
             };
             var hex = JT809_2019_Serializer.Serialize(jT809_0x9400_0x9403).ToHexString();
-            Assert.Equal("00000000000000000000000002000000005EA56140000000005EA56140000000005EA56F50D4C141353634370000000000000000000000000000020000000000000000000000000000000000000CC6A3C0CDBCDDCABBB1A8BEAF", hex);
+            Assert.Equal("00000000000002DFDC1C350002000000005EA56140000000005EA56140000000005EA56F50D4C1413536343700000000000000000000000000000200000000000002DFDC1C35000000000000000CC6A3C0CDBCDDCABBB1A8BEAF", hex);
         }
 
         [Fact]
         public void Test_2019_2()
         {
-            var bytes = "00000000000000000000000002000000005EA56140000000005EA56140000000005EA56F50D4C141353634370000000000000000000000000000020000000000000000000000000000000000000CC6A3C0CDBCDDCABBB1A8BEAF".ToHexBytes();
+            var bytes = "00000000000002DFDC1C350002000000005EA56140000000005EA56140000000005EA56F50D4C1413536343700000000000000000000000000000200000000000002DFDC1C35000000000000000CC6A3C0CDBCDDCABBB1A8BEAF".ToHexBytes();
             JT809_0x9400_0x9403 jT809_0x9400_0x9403 = JT809_2019_Serializer.Deserialize<JT809_0x9400_0x9403>(bytes);
             Assert.Equal(JT809WarnType.疲劳驾驶报警, jT809_0x9400_0x9403.WarnType);
             Assert.Equal(DateTime.Parse("2020-04-26 18:24:00"), jT809_0x9400_0x9403.WarnTime);
@@ -72,8 +72,8 @@ namespace JT809.Protocol.Test.JT809SubMessageBody
             Assert.Equal(DateTime.Parse("2020-04-26 19:24:00"), jT809_0x9400_0x9403.EndTime);
             Assert.Equal("疲劳驾驶报警", jT809_0x9400_0x9403.WarnContent);
             Assert.Equal((uint)12, jT809_0x9400_0x9403.WarnLength);
-            Assert.Equal("30313233343536373839", jT809_0x9400_0x9403.DestinationPlatformId);
-            Assert.Equal("30313233343536373839", jT809_0x9400_0x9403.SourcePlatformId);
+            Assert.Equal("12345678901", jT809_0x9400_0x9403.DestinationPlatformId);
+            Assert.Equal("12345678901", jT809_0x9400_0x9403.SourcePlatformId);
         }
     }
 }
diff --git a/src/JT809.Protocol/MessageBody/JT809_0x1200.cs b/src/JT809.Protocol/MessageBody/JT809_0x1200.cs
index 57db2e5..d0e7315 100644
--- a/src/JT809.Protocol/MessageBody/JT809_0x1200.cs
+++ b/src/JT809.Protocol/MessageBody/JT809_0x1200.cs
@@ -4,6 +4,7 @@ using JT809.Protocol.Exceptions;
 using JT809.Protocol.Extensions;
 using JT809.Protocol.Formatters;
 using JT809.Protocol.MessagePack;
+using System;
 
 namespace JT809.Protocol.MessageBody
 {
@@ -70,7 +71,7 @@ namespace JT809.Protocol.MessageBody
                 }
                 writer.WriteInt32Return(writer.GetCurrentPosition() - subContentLengthPosition - 4, subContentLengthPosition);
             }
-            catch
+            catch(Exception ex)
             {
                 throw new JT809Exception(JT809ErrorCode.SubBodiesParseError, $"SubBusinessType>{value.SubBusinessType.ToString()}");
             }
diff --git a/src/JT809.Protocol/SubMessageBody/JT809_0x1200_0x1201.cs b/src/JT809.Protocol/SubMessageBody/JT809_0x1200_0x1201.cs
index 1e14c6f..fef1a73 100644
--- a/src/JT809.Protocol/SubMessageBody/JT809_0x1200_0x1201.cs
+++ b/src/JT809.Protocol/SubMessageBody/JT809_0x1200_0x1201.cs
@@ -49,21 +49,21 @@ namespace JT809.Protocol.SubMessageBody
             JT809_0x1200_0x1201 value = new JT809_0x1200_0x1201();
             if(config.Version== JT809Version.JTT2011)
             {
-                value.PlateformId = reader.ReadBigNumber(11);
-                value.ProducerId = reader.ReadBigNumber(11);
+                value.PlateformId = reader.ReadString(11);
+                value.ProducerId = reader.ReadString(11);
 #warning 此处应该改成大端模式读取数据吧
-                value.TerminalModelType = reader.ReadBigNumber(20);
-                value.TerminalId = reader.ReadBigNumber(7);
+                value.TerminalModelType = reader.ReadString(20);
+                value.TerminalId = reader.ReadString(7);
                 value.TerminalId = value.TerminalId.ToUpper();
                 value.TerminalSimCode = reader.ReadString(12);
             }
             else
             {
-                value.PlateformId = reader.ReadBigNumber(11);
-                value.ProducerId = reader.ReadBigNumber(11);
-                value.TerminalModelType = reader.ReadBigNumber(30);
+                value.PlateformId = reader.ReadString(11);
+                value.ProducerId = reader.ReadString(11);
+                value.TerminalModelType = reader.ReadString(30);
                 value.IMIEId = reader.ReadString(15);
-                value.TerminalId = reader.ReadBigNumber(30);
+                value.TerminalId = reader.ReadString(30);
                 value.TerminalId = value.TerminalId.ToUpper();
                 value.TerminalSimCode = reader.ReadString(13);
             }
@@ -74,21 +74,21 @@ namespace JT809.Protocol.SubMessageBody
         {
             if(config.Version== JT809Version.JTT2011)
             {
-                writer.WriteBigNumber(value.PlateformId, 11);
-                writer.WriteBigNumber(value.ProducerId, 11);
+                writer.WriteStringPadRight(value.PlateformId, 11);
+                writer.WriteStringPadRight(value.ProducerId, 11);
 #warning 此处应该改成大端模式读取数据吧
-                writer.WriteBigNumber(value.TerminalModelType, 20);
-                writer.WriteBigNumber(value.TerminalId.ToUpper(), 7);
+                writer.WriteStringPadRight(value.TerminalModelType, 20);
+                writer.WriteStringPadRight(value.TerminalId.ToUpper(), 7);
                 writer.WriteStringPadLeft(value.TerminalSimCode, 12);
             }
             else
             {
-                writer.WriteBigNumber(value.PlateformId, 11);
-                writer.WriteBigNumber(value.ProducerId, 11);
-                writer.WriteBigNumber(value.TerminalModelType, 30);
+                writer.WriteStringPadRight(value.PlateformId, 11);
+                writer.WriteStringPadRight(value.ProducerId, 11);
+                writer.WriteStringPadRight(value.TerminalModelType, 30);
                 writer.WriteStringPadRight(value.IMIEId, 15);
-                writer.WriteBigNumber(value.TerminalId.ToUpper(), 30);
-                writer.WriteStringPadLeft(value.TerminalSimCode, 13);
+                writer.WriteStringPadRight(value.TerminalId.ToUpper(), 30);
+                writer.WriteStringPadRight(value.TerminalSimCode, 13);
             }
         }
     }
diff --git a/src/JT809.Protocol/SubMessageBody/JT809_0x1200_0x1202.cs b/src/JT809.Protocol/SubMessageBody/JT809_0x1200_0x1202.cs
index 97f2826..8dc03f8 100644
--- a/src/JT809.Protocol/SubMessageBody/JT809_0x1200_0x1202.cs
+++ b/src/JT809.Protocol/SubMessageBody/JT809_0x1200_0x1202.cs
@@ -54,11 +54,11 @@ namespace JT809.Protocol.SubMessageBody
                value.GNSSData.Encrypt = (JT809_VehiclePositionEncrypt)reader.ReadByte();
                value.GNSSData.DataLength = reader.ReadUInt32();
                value.GNSSData.GnssData = reader.ReadArray((int)value.GNSSData.DataLength).ToArray();
-               value.GNSSData.PlatformId1 = reader.ReadBigNumber(11);
+               value.GNSSData.PlatformId1 = reader.ReadString(11);
                value.GNSSData.Alarm1 = reader.ReadUInt32();
-               value.GNSSData.PlatformId2 = reader.ReadBigNumber(11);
+               value.GNSSData.PlatformId2 = reader.ReadString(11);
                 value.GNSSData.Alarm2 = reader.ReadUInt32();
-               value.GNSSData.PlatformId3 = reader.ReadBigNumber(11);
+               value.GNSSData.PlatformId3 = reader.ReadString(11);
                 value.GNSSData.Alarm3 = reader.ReadUInt32();
             }
             return value;
@@ -90,13 +90,13 @@ namespace JT809.Protocol.SubMessageBody
                 writer.WriteByte((byte)value.GNSSData.Encrypt);
                 writer.Skip(4, out int position);
                 writer.WriteArray(value.GNSSData.GnssData);
-                writer.WriteBigNumber(value.GNSSData.PlatformId1,11);
+                writer.WriteUInt32Return((uint)(writer.GetCurrentPosition() - position - 4), position);
+                writer.WriteStringPadRight(value.GNSSData.PlatformId1,11);
                 writer.WriteUInt32(value.GNSSData.Alarm1);
-                writer.WriteBigNumber(value.GNSSData.PlatformId2,11);
+                writer.WriteStringPadRight(value.GNSSData.PlatformId2,11);
                 writer.WriteUInt32(value.GNSSData.Alarm2);
-                writer.WriteBigNumber(value.GNSSData.PlatformId3,11);
+                writer.WriteStringPadRight(value.GNSSData.PlatformId3,11);
                 writer.WriteUInt32(value.GNSSData.Alarm3);
-                writer.WriteUInt32Return((uint)(writer.GetCurrentPosition() - position - 4), position);
             }
         }
     }
diff --git a/src/JT809.Protocol/SubMessageBody/JT809_0x1400_0x1402.cs b/src/JT809.Protocol/SubMessageBody/JT809_0x1400_0x1402.cs
index e634239..87f2649 100644
--- a/src/JT809.Protocol/SubMessageBody/JT809_0x1400_0x1402.cs
+++ b/src/JT809.Protocol/SubMessageBody/JT809_0x1400_0x1402.cs
@@ -80,7 +80,7 @@ namespace JT809.Protocol.SubMessageBody
             }
             else 
             {
-                value.SourcePlatformId = reader.ReadBigNumber(11);
+                value.SourcePlatformId = reader.ReadString(11);
             }
             value.WarnType = (JT809WarnType)reader.ReadUInt16();
             value.WarnTime = reader.ReadUTCDateTime();
@@ -95,7 +95,7 @@ namespace JT809.Protocol.SubMessageBody
 #warning 此处车牌号文档长度有误,使用旧版长度21
                 value.VehicleNo = reader.ReadString(21);
                 value.VehicleColor = (JT809VehicleColorType)reader.ReadByte();
-                value.DestinationPlatformId = reader.ReadBigNumber(11);
+                value.DestinationPlatformId = reader.ReadString(11);
                 value.DRVLineId = reader.ReadUInt32();
             }
             value.InfoLength = reader.ReadUInt32();
@@ -111,7 +111,7 @@ namespace JT809.Protocol.SubMessageBody
             }
             else 
             {
-                writer.WriteBigNumber(value.SourcePlatformId,11);
+                writer.WriteStringPadRight(value.SourcePlatformId,11);
             }
             writer.WriteUInt16((ushort)value.WarnType);
             writer.WriteUTCDateTime(value.WarnTime);
@@ -125,7 +125,7 @@ namespace JT809.Protocol.SubMessageBody
                 writer.WriteUTCDateTime(value.EndTime);
                 writer.WriteStringPadRight(value.VehicleNo,21);
                 writer.WriteByte((byte)value.VehicleColor);
-                writer.WriteBigNumber(value.DestinationPlatformId,11);
+                writer.WriteStringPadRight(value.DestinationPlatformId,11);
                 writer.WriteUInt32(value.DRVLineId);
             }
             // 先计算内容长度(汉字为两个字节)