diff --git a/README.md b/README.md
index e3286ef..262b28a 100644
--- a/README.md
+++ b/README.md
@@ -320,6 +320,13 @@ JT808Serializer DT2JT808Serializer = new JT808Serializer(DT2JT808Config);
[可以参考Simples的Demo13](https://github.com/SmallChi/JT808/blob/master/src/JT808.Protocol.Test/Simples/Demo13.cs)
+### 举个栗子14
+
+场景:
+由于协议库本身可能存在消息解析出错的情况,要么就提PR上来,但是不一定会及时发布,这时候就需要自己把原有的消息解析复制出来,改造好,然后重新注册。
+
+[可以参考Simples的Demo14](https://github.com/SmallChi/JT808/blob/master/src/JT808.Protocol.Test/Simples/Demo14.cs)
+
## NuGet安装
| Package Name| Version| Preview Version |Downloads|Remark|
diff --git a/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.JT1078/JT808.Protocol.Extensions.JT1078.xml b/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.JT1078/JT808.Protocol.Extensions.JT1078.xml
index ade6f5b..72d78ad 100644
--- a/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.JT1078/JT808.Protocol.Extensions.JT1078.xml
+++ b/src/JT808.Protocol.Extensions/JT808.Protocol.Extensions.JT1078/JT808.Protocol.Extensions.JT1078.xml
@@ -1831,6 +1831,16 @@
文件上传指令
+
+
+ 文件上传指令
+
+
+
+
+ 0x9206
+
+
服务器IP地址服务
@@ -1916,6 +1926,30 @@
任务执行条件
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
文件上传控制
diff --git a/src/JT808.Protocol.Test/Simples/Demo14.cs b/src/JT808.Protocol.Test/Simples/Demo14.cs
new file mode 100644
index 0000000..85a6670
--- /dev/null
+++ b/src/JT808.Protocol.Test/Simples/Demo14.cs
@@ -0,0 +1,162 @@
+using JT808.Protocol.Enums;
+using JT808.Protocol.Interfaces;
+using JT808.Protocol.Internal;
+using JT808.Protocol.Extensions;
+using Microsoft.Extensions.DependencyInjection;
+using System;
+using System.Collections.Generic;
+using System.Text;
+using Xunit;
+using JT808.Protocol.MessageBody;
+using JT808.Protocol.Formatters;
+using JT808.Protocol.MessagePack;
+using System.Text.Json;
+using JT808.Protocol.MessageBody.CarDVR;
+using System.Linq;
+using JT808.Protocol.Test.JT808LocationAttach;
+using static JT808.Protocol.MessageBody.JT808_0x8105;
+using System.Buffers.Binary;
+using Newtonsoft.Json;
+
+namespace JT808.Protocol.Test.Simples
+{
+ public class Demo14
+ {
+ JT808Serializer JT808Serializer;
+
+ public Demo14()
+ {
+ IServiceCollection serviceDescriptors = new ServiceCollection();
+ serviceDescriptors.AddJT808Configure();
+ //通常在startup中使用app的Use进行扩展
+ IServiceProvider serviceProvider = serviceDescriptors.BuildServiceProvider();
+ Use(serviceProvider);
+ }
+
+ public void Use(IServiceProvider serviceProvider)
+ {
+ IJT808Config jT808Config = serviceProvider.GetRequiredService();
+ //替换原有消息存在的BUG
+ jT808Config.MsgIdFactory.Map[0x0001]=new JT808_0x0001_Replace();
+ JT808Serializer = jT808Config.GetSerializer();
+ }
+
+ [Fact]
+ public void Test1()
+ {
+ JT808Package jT808Package = new JT808Package
+ {
+ Header = new JT808Header
+ {
+ MsgId = Enums.JT808MsgId.终端通用应答.ToUInt16Value(),
+ ManualMsgNum = 1203,
+ TerminalPhoneNo = "012345678900",
+ },
+ Bodies = new JT808_0x0001_Replace
+ {
+ ReplyMsgId = Enums.JT808MsgId.终端心跳.ToUInt16Value(),
+ ReplyMsgNum = 1000,
+ TerminalResult = Enums.JT808TerminalResult.Success,
+ Test=168
+ }
+ };
+ var hex = JT808Serializer.Serialize(jT808Package).ToHexString();
+ Assert.Equal("7E0001000701234567890004B303E800020000A8797E", hex);
+ }
+
+ [Fact]
+ public void Test2()
+ {
+ var bytes = "7E0001000701234567890004B303E800020000A8797E".ToHexBytes();
+ JT808Package jT808Package = JT808Serializer.Deserialize(bytes);
+ Assert.Equal(Enums.JT808MsgId.终端通用应答.ToValue(), jT808Package.Header.MsgId);
+ Assert.Equal(1203, jT808Package.Header.MsgNum);
+ JT808_0x0001_Replace JT808Bodies = (JT808_0x0001_Replace)jT808Package.Bodies;
+ Assert.Equal(Enums.JT808MsgId.终端心跳.ToUInt16Value(), JT808Bodies.ReplyMsgId);
+ Assert.Equal(1000, JT808Bodies.ReplyMsgNum);
+ Assert.Equal(Enums.JT808TerminalResult.Success, JT808Bodies.TerminalResult);
+ Assert.Equal(168u, JT808Bodies.Test);
+ }
+ }
+
+ ///
+ /// 终端通用应答_替换原有的消息,来解决库现有的bug
+ ///
+ public class JT808_0x0001_Replace : JT808Bodies, IJT808MessagePackFormatter, IJT808Analyze
+ {
+ ///
+ /// 0x0001
+ ///
+ public override ushort MsgId => 0x0001;
+ ///
+ /// 终端通用应答
+ ///
+ public override string Description => "终端通用应答";
+ ///
+ /// 应答流水号
+ /// 对应的平台消息的流水号
+ ///
+ public ushort ReplyMsgNum { get; set; }
+ ///
+ /// 应答 ID
+ /// 对应的平台消息的 ID
+ ///
+ ///
+ public ushort ReplyMsgId { get; set; }
+
+ ///
+ /// 结果
+ /// 0:成功/确认;1:失败;2:消息有误;3:不支持
+ ///
+ public JT808TerminalResult TerminalResult { get; set; }
+ ///
+ /// 测试
+ ///
+ public ushort Test { get; set; }
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public JT808_0x0001_Replace Deserialize(ref JT808MessagePackReader reader, IJT808Config config)
+ {
+ JT808_0x0001_Replace jT808_0X0001 = new JT808_0x0001_Replace();
+ jT808_0X0001.ReplyMsgNum = reader.ReadUInt16();
+ jT808_0X0001.ReplyMsgId = reader.ReadUInt16();
+ jT808_0X0001.TerminalResult = (JT808TerminalResult)reader.ReadByte();
+ jT808_0X0001.Test = reader.ReadUInt16();
+ return jT808_0X0001;
+ }
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public void Serialize(ref JT808MessagePackWriter writer, JT808_0x0001_Replace value, IJT808Config config)
+ {
+ writer.WriteUInt16(value.ReplyMsgNum);
+ writer.WriteUInt16(value.ReplyMsgId);
+ writer.WriteByte((byte)value.TerminalResult);
+ writer.WriteUInt16(value.Test);
+ }
+ ///
+ ///
+ ///
+ ///
+ ///
+ ///
+ public void Analyze(ref JT808MessagePackReader reader, Utf8JsonWriter writer, IJT808Config config)
+ {
+ var replyMsgNum = reader.ReadUInt16();
+ var replyMsgId = reader.ReadUInt16();
+ var terminalResult = reader.ReadByte();
+ var test = reader.ReadUInt16();
+ writer.WriteNumber($"[{replyMsgNum.ReadNumber()}]应答流水号", replyMsgNum);
+ writer.WriteNumber($"[{replyMsgId.ReadNumber()}]应答消息Id", replyMsgId);
+ writer.WriteString($"[{terminalResult.ReadNumber()}]结果", ((JT808TerminalResult)terminalResult).ToString());
+ writer.WriteNumber($"[{test.ReadNumber()}]测试", test);
+ }
+ }
+}