diff --git a/src/JT809.Protocol.Test/JT809SubMessageBody/JT809_0x1200_0x1205Test.cs b/src/JT809.Protocol.Test/JT809SubMessageBody/JT809_0x1200_0x1205Test.cs
new file mode 100644
index 0000000..d670ec4
--- /dev/null
+++ b/src/JT809.Protocol.Test/JT809SubMessageBody/JT809_0x1200_0x1205Test.cs
@@ -0,0 +1,45 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using Xunit;
+using JT809.Protocol;
+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_0x1205Test
+ {
+ private JT809Serializer JT809_2019_Serializer = new JT809Serializer(new DefaultGlobalConfig() { Version = JT809Version.JTT2019 });
+
+ ///
+ /// 1078qq群808432702:大兄弟提供的
+ ///
+ [Fact]
+ public void Test1()
+ {
+ var bytes = "5B00000044000004571200000004570101010000000000000000004EBC924FB2E2CAD43131313100000000000000000000000000041205040000000400000000001B735D".ToHexBytes();
+ JT809Package jT809Package = JT809_2019_Serializer.Deserialize(bytes);
+ var body = jT809Package.Bodies as JT809_0x1200;
+ var subBody = body.SubBodies as JT809_0x1200_0x1205;
+ Assert.NotNull(body);
+ Assert.NotNull(subBody);
+ Assert.Equal("测试1111", body.VehicleNo);
+ Assert.Equal(JT809VehicleColorType.白色, body.VehicleColor);
+ Assert.Equal(1024u, subBody.SourceDataType);
+ Assert.Equal(1024u, subBody.SourceMsgSN);
+ Assert.Equal(0u, subBody.DataLength);
+ }
+
+ [Fact]
+ public void Test2()
+ {
+ var bytes = "5B00000044000004571200000004570101010000000000000000004EBC924FB2E2CAD43131313100000000000000000000000000041205040000000400000000001B735D".ToHexBytes();
+ string json = JT809_2019_Serializer.Analyze(bytes);
+ }
+ }
+}
diff --git a/src/JT809.Protocol.Test/JT809SubMessageBody/JT809_0x1200_0x1206Test.cs b/src/JT809.Protocol.Test/JT809SubMessageBody/JT809_0x1200_0x1206Test.cs
new file mode 100644
index 0000000..f7aeb3a
--- /dev/null
+++ b/src/JT809.Protocol.Test/JT809SubMessageBody/JT809_0x1200_0x1206Test.cs
@@ -0,0 +1,45 @@
+using System;
+using System.Collections.Generic;
+using System.Text;
+using Xunit;
+using JT809.Protocol;
+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_0x1206Test
+ {
+ private JT809Serializer JT809_2019_Serializer = new JT809Serializer(new DefaultGlobalConfig() { Version = JT809Version.JTT2019 });
+
+ ///
+ /// 1078qq群808432702:大兄弟提供的
+ ///
+ [Fact]
+ public void Test1()
+ {
+ var bytes = "5B00000044000004571200000004570101010000000000000000004EBC924FB2E2CAD431313131000000000000000000000000000412060400000004000000000063895D".ToHexBytes();
+ JT809Package jT809Package = JT809_2019_Serializer.Deserialize(bytes);
+ var body = jT809Package.Bodies as JT809_0x1200;
+ var subBody = body.SubBodies as JT809_0x1200_0x1206;
+ Assert.NotNull(body);
+ Assert.NotNull(subBody);
+ Assert.Equal("测试1111", body.VehicleNo);
+ Assert.Equal(JT809VehicleColorType.白色, body.VehicleColor);
+ Assert.Equal(1024u, subBody.SourceDataType);
+ Assert.Equal(1024u, subBody.SourceMsgSN);
+ Assert.Equal(0u, subBody.DataLength);
+ }
+
+ [Fact]
+ public void Test2()
+ {
+ var bytes = "5B00000044000004571200000004570101010000000000000000004EBC924FB2E2CAD431313131000000000000000000000000000412060400000004000000000063895D".ToHexBytes();
+ string json = JT809_2019_Serializer.Analyze(bytes);
+ }
+ }
+}
diff --git a/src/JT809.Protocol.Test/JT809SubMessageBody/JT809_0x9200_0x9201Test.cs b/src/JT809.Protocol.Test/JT809SubMessageBody/JT809_0x9200_0x9201Test.cs
index 38c13dd..1128e49 100644
--- a/src/JT809.Protocol.Test/JT809SubMessageBody/JT809_0x9200_0x9201Test.cs
+++ b/src/JT809.Protocol.Test/JT809SubMessageBody/JT809_0x9200_0x9201Test.cs
@@ -25,6 +25,14 @@ namespace JT809.Protocol.Test.JT809SubMessageBody
{
var bytes = "5B0000002F000004579200000004570101010000000000000000004EBC924F9201000000070400000004000189DA5D".ToHexBytes();
JT809Package jT809_0X9200_0X9201 = JT809_2019_Serializer.Deserialize(bytes);
+ var body = jT809_0X9200_0X9201.Bodies as JT809_0x9200;
+ var subBody = body.SubBodies as JT809_0x9200_0x9201;
+ Assert.NotNull(body);
+ Assert.NotNull(subBody);
+ Assert.Equal(JT809VehicleColorType.其他, body.VehicleColor);
+ Assert.Equal(JT809_0x9201_Result.审核通过_完成注册, subBody.Result);
+ Assert.Equal(1024u, subBody.MsgSn);
+ Assert.Equal(1024u, subBody.DataType);
}
///
diff --git a/src/JT809.Protocol/Enums/JT809ErrorCode.cs b/src/JT809.Protocol/Enums/JT809ErrorCode.cs
index f4f0685..54272fa 100644
--- a/src/JT809.Protocol/Enums/JT809ErrorCode.cs
+++ b/src/JT809.Protocol/Enums/JT809ErrorCode.cs
@@ -15,6 +15,7 @@ namespace JT809.Protocol.Enums
BodiesParseError=1007,
SubBodiesParseError = 1008,
GetAttributeError=1009,
+ ReaderRemainContentLengthError = 1010,
NotGlobalRegisterFormatterAssembly=1011,
}
}
diff --git a/src/JT809.Protocol/JT809SubBodies.cs b/src/JT809.Protocol/JT809SubBodies.cs
index 6b284b8..f975b31 100644
--- a/src/JT809.Protocol/JT809SubBodies.cs
+++ b/src/JT809.Protocol/JT809SubBodies.cs
@@ -13,6 +13,11 @@ namespace JT809.Protocol
/// 当数据体为空的时候,使用null作为空包感觉不适合,所以就算使用空包也需要new一下来表达意思。
///
public virtual bool SkipSerialization { get; set; } = false;
+ ///
+ /// 2019文档导致需要兼容
+ /// 是否跳过后续的长度
+ ///
+ public virtual bool SkipDataLength { get; set; } = false;
public abstract ushort SubMsgId { get; }
diff --git a/src/JT809.Protocol/MessageBody/JT809_0x1200.cs b/src/JT809.Protocol/MessageBody/JT809_0x1200.cs
index 9a10597..1ac0b2c 100644
--- a/src/JT809.Protocol/MessageBody/JT809_0x1200.cs
+++ b/src/JT809.Protocol/MessageBody/JT809_0x1200.cs
@@ -5,6 +5,7 @@ using JT809.Protocol.Formatters;
using JT809.Protocol.Interfaces;
using JT809.Protocol.MessagePack;
using System;
+using System.Collections.Generic;
using System.Text.Json;
namespace JT809.Protocol.MessageBody
@@ -32,14 +33,17 @@ namespace JT809.Protocol.MessageBody
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.SkipDataLength)
+ {
+ value.DataLength = reader.ReadUInt32();
+ writer.WriteNumber($"[{value.DataLength.ReadNumber()}]后续数据长度", value.DataLength);
+ }
if (!subBodies.SkipSerialization)
{
writer.WriteStartObject("子业务类型");
@@ -61,13 +65,16 @@ namespace JT809.Protocol.MessageBody
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.SkipDataLength)
+ {
+ value.DataLength = reader.ReadUInt32();
+ }
if (!subBodies.SkipSerialization)
{
value.SubBodies = JT809MessagePackFormatterResolverExtensions.JT809DynamicDeserialize(
@@ -91,19 +98,35 @@ namespace JT809.Protocol.MessageBody
writer.WriteUInt16(value.SubBusinessType);
try
{
- // 先写入内容,然后在根据内容反写内容长度
- writer.Skip(4, out int subContentLengthPosition);
- if (value.SubBodies != null)
+ if (value.SubBodies.SkipDataLength)
+ {
+ if (value.SubBodies != null)
+ {
+ if (!value.SubBodies.SkipSerialization)
+ {
+ JT809MessagePackFormatterResolverExtensions.JT809DynamicSerialize(
+ value.SubBodies,
+ ref writer, value.SubBodies,
+ config);
+ }
+ }
+ }
+ else
{
- if (!value.SubBodies.SkipSerialization)
+ // 先写入内容,然后在根据内容反写内容长度
+ writer.Skip(4, out int subContentLengthPosition);
+ if (value.SubBodies != null)
{
- JT809MessagePackFormatterResolverExtensions.JT809DynamicSerialize(
- value.SubBodies,
- ref writer, value.SubBodies,
- config);
+ if (!value.SubBodies.SkipSerialization)
+ {
+ JT809MessagePackFormatterResolverExtensions.JT809DynamicSerialize(
+ value.SubBodies,
+ ref writer, value.SubBodies,
+ config);
+ }
}
+ writer.WriteInt32Return(writer.GetCurrentPosition() - subContentLengthPosition - 4, subContentLengthPosition);
}
- writer.WriteInt32Return(writer.GetCurrentPosition() - subContentLengthPosition - 4, subContentLengthPosition);
}
catch(Exception ex)
{
diff --git a/src/JT809.Protocol/MessageBody/JT809_0x9200.cs b/src/JT809.Protocol/MessageBody/JT809_0x9200.cs
index 3163447..48a00f9 100644
--- a/src/JT809.Protocol/MessageBody/JT809_0x9200.cs
+++ b/src/JT809.Protocol/MessageBody/JT809_0x9200.cs
@@ -26,8 +26,19 @@ namespace JT809.Protocol.MessageBody
JT809_0x9200 value = new JT809_0x9200();
//1078qq群808432702:大兄弟提供的
//由于车辆注册信息应答消息0x9201子业务不存在车牌号和颜色需要跳过
- var subBusinessType = reader.ReadVirtualUInt16();
- if (subBusinessType != JT809SubBusinessType.车辆注册信息应答消息.ToUInt16Value())
+ 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);
@@ -63,10 +74,18 @@ namespace JT809.Protocol.MessageBody
public JT809_0x9200 Deserialize(ref JT809MessagePackReader reader, IJT809Config config)
{
JT809_0x9200 value = new JT809_0x9200();
- var subBusinessType = reader.ReadVirtualUInt16();
//1078qq群808432702:大兄弟提供的
//由于车辆注册信息应答消息0x9201子业务不存在车牌号和颜色需要跳过
- if (subBusinessType != JT809SubBusinessType.车辆注册信息应答消息.ToUInt16Value())
+ 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();
@@ -99,7 +118,15 @@ namespace JT809.Protocol.MessageBody
{
//1078qq群808432702:大兄弟提供的
//由于车辆注册信息应答消息0x9201子业务不存在车牌号和颜色需要跳过
- if (value.SubBusinessType != JT809SubBusinessType.车辆注册信息应答消息.ToUInt16Value())
+ if (config.Version == JT809Version.JTT2019)
+ {
+ if (value.SubBusinessType != JT809SubBusinessType.车辆注册信息应答消息.ToUInt16Value())
+ {
+ writer.WriteStringPadRight(value.VehicleNo, 21);
+ writer.WriteByte((byte)value.VehicleColor);
+ }
+ }
+ else
{
writer.WriteStringPadRight(value.VehicleNo, 21);
writer.WriteByte((byte)value.VehicleColor);
diff --git a/src/JT809.Protocol/MessagePack/JT809MessagePackReader.cs b/src/JT809.Protocol/MessagePack/JT809MessagePackReader.cs
index 3c28c81..f65ec22 100644
--- a/src/JT809.Protocol/MessagePack/JT809MessagePackReader.cs
+++ b/src/JT809.Protocol/MessagePack/JT809MessagePackReader.cs
@@ -1,4 +1,5 @@
using JT809.Protocol.Buffers;
+using JT809.Protocol.Exceptions;
using JT809.Protocol.Extensions;
using System;
using System.Buffers;
@@ -445,15 +446,18 @@ namespace JT809.Protocol.MessagePack
}
public int ReadCurrentRemainContentLength()
{
+ int len = 0;
if (_decoded)
{
+ len = Reader.Length - ReaderCount - 3;
//内容长度=总长度-读取的长度-3(校验码2位+终止符1位)
- return Reader.Length - ReaderCount - 3;
}
else
{
- return Reader.Length - ReaderCount;
+ len= Reader.Length - ReaderCount;
}
+ if (len < 0) throw new JT809Exception(Enums.JT809ErrorCode.ReaderRemainContentLengthError);
+ return len;
}
public void Skip(int count=1)
{
diff --git a/src/JT809.Protocol/SubMessageBody/JT809_0x1200_0x1205.cs b/src/JT809.Protocol/SubMessageBody/JT809_0x1200_0x1205.cs
index fa98ae5..8ca6ce9 100644
--- a/src/JT809.Protocol/SubMessageBody/JT809_0x1200_0x1205.cs
+++ b/src/JT809.Protocol/SubMessageBody/JT809_0x1200_0x1205.cs
@@ -22,6 +22,11 @@ namespace JT809.Protocol.SubMessageBody
public override string Description => "启动车辆定位信息交换应答消息";
public override bool SkipSerialization => false;
+ public override bool SkipDataLength => true;
+ ///
+ /// 子业务类型标识
+ ///
+ public ushort DataType { get; set; }
///
/// 对应启动车辆定位信息交换请求消息源子业务类型标识
///
@@ -29,7 +34,7 @@ namespace JT809.Protocol.SubMessageBody
///
/// 对应启动车辆定位信息交换请求消息源报文序列号
///
- public uint SourceMsgSn { get; set; }
+ public uint SourceMsgSN { get; set; }
///
/// 后续数据长度 值为0x00
///
@@ -42,8 +47,8 @@ namespace JT809.Protocol.SubMessageBody
{
value.SourceDataType = reader.ReadUInt16();
writer.WriteString($"[{value.SourceDataType.ReadNumber()}]对应启动车辆定位信息交换请求消息源子业务类型标识", ((JT809SubBusinessType)value.SourceDataType).ToString());
- value.SourceMsgSn = reader.ReadUInt32();
- writer.WriteNumber($"[{value.SourceMsgSn.ReadNumber()}对应启动车辆定位信息交换请求消息源报文序列号]", value.SourceMsgSn);
+ value.SourceMsgSN = reader.ReadUInt32();
+ writer.WriteNumber($"[{value.SourceMsgSN.ReadNumber()}对应启动车辆定位信息交换请求消息源报文序列号]", value.SourceMsgSN);
value.DataLength = reader.ReadUInt32();
writer.WriteNumber($"[{value.DataLength.ReadNumber()}后续数据长度]", value.DataLength);
}
@@ -52,9 +57,10 @@ namespace JT809.Protocol.SubMessageBody
public JT809_0x1200_0x1205 Deserialize(ref JT809MessagePackReader reader, IJT809Config config)
{
var value = new JT809_0x1200_0x1205();
- if (config.Version == JT809Version.JTT2019) {
+ if (config.Version == JT809Version.JTT2019)
+ {
value.SourceDataType = reader.ReadUInt16();
- value.SourceMsgSn = reader.ReadUInt32();
+ value.SourceMsgSN = reader.ReadUInt32();
value.DataLength = reader.ReadUInt32();
}
return value;
@@ -62,9 +68,10 @@ namespace JT809.Protocol.SubMessageBody
public void Serialize(ref JT809MessagePackWriter writer, JT809_0x1200_0x1205 value, IJT809Config config)
{
- if (config.Version == JT809Version.JTT2019) {
+ if (config.Version == JT809Version.JTT2019)
+ {
writer.WriteUInt16(value.SourceDataType);
- writer.WriteUInt32(value.SourceMsgSn);
+ writer.WriteUInt32(value.SourceMsgSN);
writer.WriteUInt32(value.DataLength);
}
}
diff --git a/src/JT809.Protocol/SubMessageBody/JT809_0x1200_0x1206.cs b/src/JT809.Protocol/SubMessageBody/JT809_0x1200_0x1206.cs
index e6a8c36..a690c24 100644
--- a/src/JT809.Protocol/SubMessageBody/JT809_0x1200_0x1206.cs
+++ b/src/JT809.Protocol/SubMessageBody/JT809_0x1200_0x1206.cs
@@ -20,7 +20,7 @@ namespace JT809.Protocol.SubMessageBody
public override ushort SubMsgId => JT809SubBusinessType.结束车辆定位信息交换应答消息.ToUInt16Value();
public override string Description => "结束车辆定位信息交换应答消息";
-
+ public override bool SkipDataLength => true;
public override bool SkipSerialization => false;
///
/// 对应结束车辆定位信息交换请求消息源子业务类型标识
@@ -29,7 +29,7 @@ namespace JT809.Protocol.SubMessageBody
///
/// 对应结束车辆定位信息交换请求消息源报文序列号
///
- public uint SourceMsgSn { get; set; }
+ public uint SourceMsgSN { get; set; }
///
/// 后续数据长度 值为0x00
///
@@ -41,9 +41,9 @@ namespace JT809.Protocol.SubMessageBody
if (config.Version == JT809Version.JTT2019)
{
value.SourceDataType = reader.ReadUInt16();
- writer.WriteString($"[{value.SourceDataType.ReadNumber()}]对应启动车辆定位信息交换请求消息源子业务类型标识", ((JT809SubBusinessType)value.SourceDataType).ToString());
- value.SourceMsgSn = reader.ReadUInt32();
- writer.WriteNumber($"[{value.SourceMsgSn.ReadNumber()}对应启动车辆定位信息交换请求消息源报文序列号]", value.SourceMsgSn);
+ writer.WriteString($"[{value.SourceDataType.ReadNumber()}]对应结束车辆定位信息交换请求消息源子业务类型标识", ((JT809SubBusinessType)value.SourceDataType).ToString());
+ value.SourceMsgSN = reader.ReadUInt32();
+ writer.WriteNumber($"[{value.SourceMsgSN.ReadNumber()}对应结束车辆定位信息交换请求消息源报文序列号]", value.SourceMsgSN);
value.DataLength = reader.ReadUInt32();
writer.WriteNumber($"[{value.DataLength.ReadNumber()}后续数据长度]", value.DataLength);
}
@@ -55,7 +55,7 @@ namespace JT809.Protocol.SubMessageBody
if (config.Version == JT809Version.JTT2019)
{
value.SourceDataType = reader.ReadUInt16();
- value.SourceMsgSn = reader.ReadUInt32();
+ value.SourceMsgSN = reader.ReadUInt32();
value.DataLength = reader.ReadUInt32();
}
return value;
@@ -66,7 +66,7 @@ namespace JT809.Protocol.SubMessageBody
if (config.Version == JT809Version.JTT2019)
{
writer.WriteUInt16(value.SourceDataType);
- writer.WriteUInt32(value.SourceMsgSn);
+ writer.WriteUInt32(value.SourceMsgSN);
writer.WriteUInt32(value.DataLength);
}
}
diff --git a/src/JT809.Protocol/SubMessageBody/JT809_0x9200_0x9201.cs b/src/JT809.Protocol/SubMessageBody/JT809_0x9200_0x9201.cs
index c4b17d0..e877f54 100644
--- a/src/JT809.Protocol/SubMessageBody/JT809_0x9200_0x9201.cs
+++ b/src/JT809.Protocol/SubMessageBody/JT809_0x9200_0x9201.cs
@@ -18,6 +18,10 @@ namespace JT809.Protocol.SubMessageBody
public override string Description => "车辆注册信息应答消息";
///
+ /// 车辆注册醒醒消息源子业务类型标识
+ ///
+ public ushort DataType { get; set; }
+ ///
/// 车辆注册信息消息源报文序号
///
public uint MsgSn { get; set; }
@@ -26,9 +30,12 @@ namespace JT809.Protocol.SubMessageBody
///
public JT809_0x9201_Result Result { get; set; }
+
public void Analyze(ref JT809MessagePackReader reader, Utf8JsonWriter writer, IJT809Config config)
{
var value = new JT809_0x9200_0x9201();
+ value.DataType = reader.ReadUInt16();
+ writer.WriteNumber($"[{value.DataType.ReadNumber()}]车辆注册醒醒消息源子业务类型标识", value.DataType);
value.MsgSn = reader.ReadUInt32();
writer.WriteNumber($"[{value.MsgSn.ReadNumber()}]车辆注册信息消息源报文序号", value.MsgSn);
value.Result = (JT809_0x9201_Result)reader.ReadByte();
@@ -38,6 +45,7 @@ namespace JT809.Protocol.SubMessageBody
public JT809_0x9200_0x9201 Deserialize(ref JT809MessagePackReader reader, IJT809Config config)
{
var value = new JT809_0x9200_0x9201();
+ value.DataType = reader.ReadUInt16();
value.MsgSn = reader.ReadUInt32();
value.Result = (JT809_0x9201_Result)reader.ReadByte();
return value;
@@ -45,6 +53,7 @@ namespace JT809.Protocol.SubMessageBody
public void Serialize(ref JT809MessagePackWriter writer, JT809_0x9200_0x9201 value, IJT809Config config)
{
+ writer.WriteUInt16(value.DataType);
writer.WriteUInt32(value.MsgSn);
writer.WriteByte((byte)value.Result);
}