|
@@ -3,7 +3,6 @@ using System.Runtime.CompilerServices;
|
|
using MessagePack;
|
|
using MessagePack;
|
|
using MessagePack.Formatters;
|
|
using MessagePack.Formatters;
|
|
using MessagePack.Resolvers;
|
|
using MessagePack.Resolvers;
|
|
-using Newtonsoft.Json.Linq;
|
|
|
|
using Vit.Extensions;
|
|
using Vit.Extensions;
|
|
|
|
|
|
namespace Vit.Core.Module.Serialization
|
|
namespace Vit.Core.Module.Serialization
|
|
@@ -18,7 +17,7 @@ namespace Vit.Core.Module.Serialization
|
|
|
|
|
|
|
|
|
|
|
|
|
|
- protected MessagePackSerializerOptions options;
|
|
|
|
|
|
+ public readonly MessagePackSerializerOptions options;
|
|
public Serialization_MessagePack()
|
|
public Serialization_MessagePack()
|
|
{
|
|
{
|
|
|
|
|
|
@@ -26,8 +25,8 @@ namespace Vit.Core.Module.Serialization
|
|
new IMessagePackFormatter[]
|
|
new IMessagePackFormatter[]
|
|
{
|
|
{
|
|
|
|
|
|
- NewtonsoftFormatter_JObject.Instance,
|
|
|
|
- NewtonsoftFormatter_JArray.Instance,
|
|
|
|
|
|
+ MessagePackFormatter_JObject.Instance,
|
|
|
|
+ MessagePackFormatter_JArray.Instance,
|
|
|
|
|
|
//NilFormatter.Instance,
|
|
//NilFormatter.Instance,
|
|
//new IgnoreFormatter<MethodBase>(),
|
|
//new IgnoreFormatter<MethodBase>(),
|
|
@@ -166,298 +165,303 @@ namespace Vit.Core.Module.Serialization
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
+
|
|
|
|
|
|
- #region NewtonsoftFormatter_SaveAsString
|
|
|
|
- private class NewtonsoftFormatter_SaveAsString<NewtonsoftType> : IMessagePackFormatter<NewtonsoftType>
|
|
|
|
- //where NewtonsoftType: Newtonsoft.Json.Linq.JToken
|
|
|
|
- {
|
|
|
|
- public void Serialize(
|
|
|
|
- ref MessagePackWriter writer, NewtonsoftType value, MessagePackSerializerOptions options)
|
|
|
|
- {
|
|
|
|
- if (value == null)
|
|
|
|
- {
|
|
|
|
- writer.WriteNil();
|
|
|
|
- return;
|
|
|
|
- }
|
|
|
|
|
|
+ }
|
|
|
|
+}
|
|
|
|
|
|
- var str = Serialization_Newtonsoft.Instance.SerializeToString(value);
|
|
|
|
- writer.Write(str);
|
|
|
|
- }
|
|
|
|
|
|
|
|
- public NewtonsoftType Deserialize(
|
|
|
|
- ref MessagePackReader reader, MessagePackSerializerOptions options)
|
|
|
|
- {
|
|
|
|
- if (reader.TryReadNil())
|
|
|
|
- {
|
|
|
|
- return default;
|
|
|
|
- }
|
|
|
|
|
|
|
|
- options.Security.DepthStep(ref reader);
|
|
|
|
|
|
|
|
- var data = reader.ReadString();
|
|
|
|
|
|
+#region 适配 Newtonsoft
|
|
|
|
+
|
|
|
|
+namespace Vit.Core.Module.Serialization
|
|
|
|
+{
|
|
|
|
+ using Newtonsoft.Json.Linq;
|
|
|
|
|
|
- reader.Depth--;
|
|
|
|
|
|
|
|
- return Newtonsoft.Json.JsonConvert.DeserializeObject<NewtonsoftType>(data);
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
|
|
|
|
|
|
|
|
- #endregion
|
|
|
|
|
|
|
|
|
|
+ #region MessagePackFormatter JObject JArray
|
|
|
|
|
|
- #region NewtonsoftFormatter JObject JArray
|
|
|
|
|
|
|
|
|
|
+ class MessagePackFormatter_JObject : IMessagePackFormatter<Newtonsoft.Json.Linq.JObject>
|
|
|
|
+ {
|
|
|
|
+
|
|
|
|
+ public static readonly MessagePackFormatter_JObject Instance = new MessagePackFormatter_JObject();
|
|
|
|
|
|
- private class NewtonsoftFormatter_JObject : IMessagePackFormatter<Newtonsoft.Json.Linq.JObject>
|
|
|
|
|
|
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
|
|
+ public void Serialize(
|
|
|
|
+ ref MessagePackWriter writer, Newtonsoft.Json.Linq.JObject value, MessagePackSerializerOptions options)
|
|
{
|
|
{
|
|
|
|
+ if (value.IsNull())
|
|
|
|
+ {
|
|
|
|
+ writer.WriteNil();
|
|
|
|
+ return;
|
|
|
|
+ }
|
|
|
|
|
|
- public static readonly NewtonsoftFormatter_JObject Instance = new NewtonsoftFormatter_JObject();
|
|
|
|
|
|
+ writer.WriteMapHeader(value.Count);
|
|
|
|
|
|
- public void Serialize(
|
|
|
|
- ref MessagePackWriter writer, Newtonsoft.Json.Linq.JObject value, MessagePackSerializerOptions options)
|
|
|
|
|
|
+ foreach (var kv in value)
|
|
{
|
|
{
|
|
- if (value == null)
|
|
|
|
|
|
+ //key
|
|
|
|
+ writer.Write(kv.Key);
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ //value
|
|
|
|
+ if (kv.Value.IsNull())
|
|
{
|
|
{
|
|
writer.WriteNil();
|
|
writer.WriteNil();
|
|
- return;
|
|
|
|
|
|
+ continue;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ switch (kv.Value)
|
|
|
|
+ {
|
|
|
|
+ case JObject jo:
|
|
|
|
+ //if (objectFormatter == null) objectFormatter = options.Resolver.GetFormatterWithVerify<JObject>();
|
|
|
|
+ //objectFormatter?.Serialize(ref writer, jo, options);
|
|
|
|
+ Serialize(ref writer, jo, options);
|
|
|
|
+ break;
|
|
|
|
+ case JArray ja:
|
|
|
|
+ //if (arrayFormatter == null) arrayFormatter = options.Resolver.GetFormatterWithVerify<JArray>();
|
|
|
|
+ //arrayFormatter?.Serialize(ref writer, ja, options);
|
|
|
|
+ MessagePackFormatter_JArray.Instance.Serialize(ref writer, ja, options);
|
|
|
|
+ break;
|
|
|
|
+
|
|
|
|
+ case JValue jv:
|
|
|
|
+ switch (jv.Type)
|
|
|
|
+ {
|
|
|
|
+ case JTokenType.String: writer.Write(jv.Value<string>()); break;
|
|
|
|
+ case JTokenType.Integer: writer.Write(jv.Value<long>()); break;
|
|
|
|
+ case JTokenType.Float: writer.Write(jv.Value<double>()); break;
|
|
|
|
+ case JTokenType.Boolean: writer.Write(jv.Value<bool>()); break;
|
|
|
|
+ case JTokenType.Date: writer.Write(jv.Value<DateTime>().ToString("yyyy-MM-dd HH:mm:ss")); break;
|
|
|
|
+ default: writer.Write(Serialization_Newtonsoft.Instance.SerializeToString(jv)); break;
|
|
|
|
+ }
|
|
|
|
+ break;
|
|
|
|
+ default:
|
|
|
|
+ string str = Serialization_Newtonsoft.Instance.SerializeToString(kv.Value);
|
|
|
|
+ writer.Write(str);
|
|
|
|
+ break;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+
|
|
|
|
|
|
- writer.WriteMapHeader(value.Count);
|
|
|
|
-
|
|
|
|
|
|
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
|
|
+ public Newtonsoft.Json.Linq.JObject Deserialize(
|
|
|
|
+ ref MessagePackReader reader, MessagePackSerializerOptions options)
|
|
|
|
+ {
|
|
|
|
+ if (reader.TryReadNil())
|
|
|
|
+ {
|
|
|
|
+ return default;
|
|
|
|
+ }
|
|
|
|
|
|
- //IMessagePackFormatter<JObject> objectFormatter = null;
|
|
|
|
- //IMessagePackFormatter<JArray> arrayFormatter = null;
|
|
|
|
|
|
+ var result = new JObject();
|
|
|
|
+ int count = reader.ReadMapHeader();
|
|
|
|
+ if (count == 0) return result;
|
|
|
|
|
|
- foreach (var kv in value)
|
|
|
|
|
|
+ options.Security.DepthStep(ref reader);
|
|
|
|
+ try
|
|
|
|
+ {
|
|
|
|
+ for (int i = 0; i < count; i++)
|
|
{
|
|
{
|
|
- //key
|
|
|
|
- writer.Write(kv.Key);
|
|
|
|
-
|
|
|
|
|
|
+ string key = reader.ReadString();
|
|
|
|
|
|
- //value
|
|
|
|
- if (kv.Value.IsNull())
|
|
|
|
|
|
+ switch (reader.NextMessagePackType)
|
|
{
|
|
{
|
|
- writer.WriteNil();
|
|
|
|
- continue;
|
|
|
|
- }
|
|
|
|
|
|
+ case MessagePackType.Map:
|
|
|
|
+ result[key] = Deserialize(ref reader, options);
|
|
|
|
|
|
- switch (kv.Value)
|
|
|
|
- {
|
|
|
|
- case JObject jo:
|
|
|
|
- //if (objectFormatter == null) objectFormatter = options.Resolver.GetFormatterWithVerify<JObject>();
|
|
|
|
- //objectFormatter?.Serialize(ref writer, jo, options);
|
|
|
|
- Serialize(ref writer, jo, options);
|
|
|
|
break;
|
|
break;
|
|
- case JArray ja:
|
|
|
|
- //if (arrayFormatter == null) arrayFormatter = options.Resolver.GetFormatterWithVerify<JArray>();
|
|
|
|
- //arrayFormatter?.Serialize(ref writer, ja, options);
|
|
|
|
- NewtonsoftFormatter_JArray.Instance.Serialize(ref writer, ja, options);
|
|
|
|
|
|
+ case MessagePackType.Array:
|
|
|
|
+ result[key] = MessagePackFormatter_JArray.Instance.Deserialize(ref reader, options);
|
|
break;
|
|
break;
|
|
-
|
|
|
|
- case JValue jv:
|
|
|
|
- switch (jv.Type)
|
|
|
|
- {
|
|
|
|
- case JTokenType.String: writer.Write(jv.Value<string>()); break;
|
|
|
|
- case JTokenType.Integer: writer.Write(jv.Value<long>()); break;
|
|
|
|
- case JTokenType.Float: writer.Write(jv.Value<double>()); break;
|
|
|
|
- case JTokenType.Boolean: writer.Write(jv.Value<bool>()); break;
|
|
|
|
- case JTokenType.Date: writer.Write(jv.Value<DateTime>().ToString("yyyy-MM-dd HH:mm:ss")); break;
|
|
|
|
- default: writer.Write(Serialization_Newtonsoft.Instance.SerializeToString(jv)); break;
|
|
|
|
- }
|
|
|
|
|
|
+ case MessagePackType.Integer: result[key] = reader.ReadInt64(); break;
|
|
|
|
+ case MessagePackType.Boolean: result[key] = reader.ReadBoolean(); break;
|
|
|
|
+ case MessagePackType.Float: result[key] = reader.ReadDouble(); break;
|
|
|
|
+ case MessagePackType.String: result[key] = reader.ReadString(); break;
|
|
|
|
+ case MessagePackType.Nil:
|
|
|
|
+ result[key] = null;
|
|
|
|
+ reader.Skip();
|
|
break;
|
|
break;
|
|
default:
|
|
default:
|
|
- string str = Serialization_Newtonsoft.Instance.SerializeToString(kv.Value);
|
|
|
|
- writer.Write(str);
|
|
|
|
|
|
+ result[key] = null;
|
|
|
|
+ reader.Skip();
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
- }
|
|
|
|
- }
|
|
|
|
|
|
|
|
- public Newtonsoft.Json.Linq.JObject Deserialize(
|
|
|
|
- ref MessagePackReader reader, MessagePackSerializerOptions options)
|
|
|
|
- {
|
|
|
|
- if (reader.TryReadNil())
|
|
|
|
- {
|
|
|
|
- return default;
|
|
|
|
}
|
|
}
|
|
|
|
+ }
|
|
|
|
+ finally
|
|
|
|
+ {
|
|
|
|
+ reader.Depth--;
|
|
|
|
+ }
|
|
|
|
|
|
- var result = new JObject();
|
|
|
|
- int count = reader.ReadMapHeader();
|
|
|
|
- if (count == 0) return result;
|
|
|
|
-
|
|
|
|
- options.Security.DepthStep(ref reader);
|
|
|
|
- try
|
|
|
|
- {
|
|
|
|
- //IMessagePackFormatter<JObject> objectFormatter = null;
|
|
|
|
- //IMessagePackFormatter<JArray> arrayFormatter = null;
|
|
|
|
-
|
|
|
|
- for (int i = 0; i < count; i++)
|
|
|
|
- {
|
|
|
|
- string key = reader.ReadString();
|
|
|
|
-
|
|
|
|
- switch (reader.NextMessagePackType)
|
|
|
|
- {
|
|
|
|
- case MessagePackType.Map:
|
|
|
|
- //if (objectFormatter == null) objectFormatter = options.Resolver.GetFormatterWithVerify<JObject>();
|
|
|
|
- //result[key] = objectFormatter?.Deserialize(ref reader, options);
|
|
|
|
- result[key] = Deserialize(ref reader, options);
|
|
|
|
-
|
|
|
|
- break;
|
|
|
|
- case MessagePackType.Array:
|
|
|
|
- //if (arrayFormatter == null) arrayFormatter = options.Resolver.GetFormatterWithVerify<JArray>();
|
|
|
|
- //result[key] = arrayFormatter?.Deserialize(ref reader, options);
|
|
|
|
- result[key] = NewtonsoftFormatter_JArray.Instance.Deserialize(ref reader, options);
|
|
|
|
- break;
|
|
|
|
- case MessagePackType.Integer: result[key] = reader.ReadInt64(); break;
|
|
|
|
- case MessagePackType.Boolean: result[key] = reader.ReadBoolean(); break;
|
|
|
|
- case MessagePackType.Float: result[key] = reader.ReadDouble(); break;
|
|
|
|
- case MessagePackType.String: result[key] = reader.ReadString(); break;
|
|
|
|
- case MessagePackType.Nil:
|
|
|
|
- result[key] = null;
|
|
|
|
- reader.Skip();
|
|
|
|
- break;
|
|
|
|
- default:
|
|
|
|
- result[key] = null;
|
|
|
|
- reader.Skip();
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
|
|
+ return result;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- finally
|
|
|
|
- {
|
|
|
|
- reader.Depth--;
|
|
|
|
- }
|
|
|
|
|
|
+ class MessagePackFormatter_JArray : IMessagePackFormatter<JArray>
|
|
|
|
+ {
|
|
|
|
+ public static readonly MessagePackFormatter_JArray Instance = new MessagePackFormatter_JArray();
|
|
|
|
|
|
|
|
|
|
- return result;
|
|
|
|
|
|
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
|
|
+ public void Serialize(
|
|
|
|
+ ref MessagePackWriter writer, Newtonsoft.Json.Linq.JArray value, MessagePackSerializerOptions options)
|
|
|
|
+ {
|
|
|
|
+ if (value.IsNull())
|
|
|
|
+ {
|
|
|
|
+ writer.WriteNil();
|
|
|
|
+ return;
|
|
}
|
|
}
|
|
- }
|
|
|
|
|
|
|
|
- private class NewtonsoftFormatter_JArray : IMessagePackFormatter<Newtonsoft.Json.Linq.JArray>
|
|
|
|
- {
|
|
|
|
- public static readonly NewtonsoftFormatter_JArray Instance = new NewtonsoftFormatter_JArray();
|
|
|
|
|
|
|
|
|
|
+ writer.WriteArrayHeader(value.Count);
|
|
|
|
|
|
- public void Serialize(
|
|
|
|
- ref MessagePackWriter writer, Newtonsoft.Json.Linq.JArray value, MessagePackSerializerOptions options)
|
|
|
|
|
|
+ foreach (var token in value)
|
|
{
|
|
{
|
|
- if (value == null)
|
|
|
|
|
|
+ if (token.IsNull())
|
|
{
|
|
{
|
|
writer.WriteNil();
|
|
writer.WriteNil();
|
|
- return;
|
|
|
|
|
|
+ continue;
|
|
|
|
+ }
|
|
|
|
+ switch (token)
|
|
|
|
+ {
|
|
|
|
+ case JObject jo:
|
|
|
|
+ MessagePackFormatter_JObject.Instance.Serialize(ref writer, jo, options);
|
|
|
|
+ break;
|
|
|
|
+ case JArray ja:
|
|
|
|
+ Serialize(ref writer, ja, options);
|
|
|
|
+ break;
|
|
|
|
+ case JValue jv:
|
|
|
|
+ switch (jv.Type)
|
|
|
|
+ {
|
|
|
|
+ case JTokenType.String: writer.Write(jv.Value<string>()); break;
|
|
|
|
+ case JTokenType.Integer: writer.Write(jv.Value<long>()); break;
|
|
|
|
+ case JTokenType.Float: writer.Write(jv.Value<double>()); break;
|
|
|
|
+ case JTokenType.Boolean: writer.Write(jv.Value<bool>()); break;
|
|
|
|
+ case JTokenType.Date: writer.Write(jv.Value<DateTime>().ToString("yyyy-MM-dd HH:mm:ss")); break;
|
|
|
|
+ default: writer.Write(Serialization_Newtonsoft.Instance.SerializeToString(jv)); break;
|
|
|
|
+ }
|
|
|
|
+ break;
|
|
|
|
+ default:
|
|
|
|
+ string str = Serialization_Newtonsoft.Instance.SerializeToString(token);
|
|
|
|
+ writer.Write(str);
|
|
|
|
+ break;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
|
|
- writer.WriteArrayHeader(value.Count);
|
|
|
|
|
|
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
|
|
+ public Newtonsoft.Json.Linq.JArray Deserialize(
|
|
|
|
+ ref MessagePackReader reader, MessagePackSerializerOptions options)
|
|
|
|
+ {
|
|
|
|
+ if (reader.TryReadNil())
|
|
|
|
+ {
|
|
|
|
+ return default;
|
|
|
|
+ }
|
|
|
|
|
|
|
|
+ var result = new JArray();
|
|
|
|
+ int count = reader.ReadArrayHeader();
|
|
|
|
+ if (count == 0) return result;
|
|
|
|
|
|
- //IMessagePackFormatter<JObject> objectFormatter = null;
|
|
|
|
- //IMessagePackFormatter<JArray> arrayFormatter = null;
|
|
|
|
|
|
+ options.Security.DepthStep(ref reader);
|
|
|
|
+ try
|
|
|
|
+ {
|
|
|
|
|
|
- foreach (var token in value)
|
|
|
|
|
|
+ for (int i = 0; i < count; i++)
|
|
{
|
|
{
|
|
- if (token.IsNull())
|
|
|
|
- {
|
|
|
|
- writer.WriteNil();
|
|
|
|
- continue;
|
|
|
|
- }
|
|
|
|
- switch (token)
|
|
|
|
|
|
+
|
|
|
|
+ switch (reader.NextMessagePackType)
|
|
{
|
|
{
|
|
- case JObject jo:
|
|
|
|
- //if (objectFormatter == null) objectFormatter = options.Resolver.GetFormatterWithVerify<JObject>();
|
|
|
|
- //objectFormatter?.Serialize(ref writer, jo, options);
|
|
|
|
- NewtonsoftFormatter_JObject.Instance.Serialize(ref writer, jo, options);
|
|
|
|
|
|
+ case MessagePackType.Map:
|
|
|
|
+ result.Add(MessagePackFormatter_JObject.Instance.Deserialize(ref reader, options));
|
|
break;
|
|
break;
|
|
- case JArray ja:
|
|
|
|
- //if (arrayFormatter == null) arrayFormatter = options.Resolver.GetFormatterWithVerify<JArray>();
|
|
|
|
- //arrayFormatter?.Serialize(ref writer, ja, options);
|
|
|
|
- Serialize(ref writer, ja, options);
|
|
|
|
|
|
+ case MessagePackType.Array:
|
|
|
|
+ result.Add(Deserialize(ref reader, options));
|
|
|
|
+ break;
|
|
|
|
+ case MessagePackType.Integer: result.Add(reader.ReadInt64()); break;
|
|
|
|
+ case MessagePackType.Boolean: result.Add(reader.ReadBoolean()); break;
|
|
|
|
+ case MessagePackType.Float: result.Add(reader.ReadDouble()); break;
|
|
|
|
+ case MessagePackType.String: result.Add(reader.ReadString()); break;
|
|
|
|
+ case MessagePackType.Nil:
|
|
|
|
+ result.Add(null);
|
|
|
|
+ reader.Skip();
|
|
break;
|
|
break;
|
|
- case JValue jv:
|
|
|
|
- switch (jv.Type)
|
|
|
|
- {
|
|
|
|
- case JTokenType.String: writer.Write(jv.Value<string>()); break;
|
|
|
|
- case JTokenType.Integer: writer.Write(jv.Value<long>()); break;
|
|
|
|
- case JTokenType.Float: writer.Write(jv.Value<double>()); break;
|
|
|
|
- case JTokenType.Boolean: writer.Write(jv.Value<bool>()); break;
|
|
|
|
- case JTokenType.Date: writer.Write(jv.Value<DateTime>().ToString("yyyy-MM-dd HH:mm:ss")); break;
|
|
|
|
- default: writer.Write(Serialization_Newtonsoft.Instance.SerializeToString(jv)); break;
|
|
|
|
- }
|
|
|
|
- break;
|
|
|
|
default:
|
|
default:
|
|
- string str = Serialization_Newtonsoft.Instance.SerializeToString(token);
|
|
|
|
- writer.Write(str);
|
|
|
|
|
|
+ result.Add(null);
|
|
|
|
+ reader.Skip();
|
|
break;
|
|
break;
|
|
}
|
|
}
|
|
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-
|
|
|
|
- public Newtonsoft.Json.Linq.JArray Deserialize(
|
|
|
|
- ref MessagePackReader reader, MessagePackSerializerOptions options)
|
|
|
|
|
|
+ finally
|
|
{
|
|
{
|
|
- if (reader.TryReadNil())
|
|
|
|
- {
|
|
|
|
- return default;
|
|
|
|
- }
|
|
|
|
|
|
+ reader.Depth--;
|
|
|
|
+ }
|
|
|
|
|
|
- var result = new JArray();
|
|
|
|
- int count = reader.ReadArrayHeader();
|
|
|
|
- if (count == 0) return result;
|
|
|
|
|
|
|
|
- options.Security.DepthStep(ref reader);
|
|
|
|
- try
|
|
|
|
- {
|
|
|
|
- //IMessagePackFormatter<JObject> objectFormatter = null;
|
|
|
|
- //IMessagePackFormatter<JArray> arrayFormatter = null;
|
|
|
|
|
|
+ return result;
|
|
|
|
+ }
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ #endregion
|
|
|
|
+
|
|
|
|
|
|
- for (int i = 0; i < count; i++)
|
|
|
|
- {
|
|
|
|
|
|
|
|
- switch (reader.NextMessagePackType)
|
|
|
|
- {
|
|
|
|
- case MessagePackType.Map:
|
|
|
|
- //if (objectFormatter == null) objectFormatter = options.Resolver.GetFormatterWithVerify<JObject>();
|
|
|
|
- //result.Add( objectFormatter?.Deserialize(ref reader, options));
|
|
|
|
- result.Add(NewtonsoftFormatter_JObject.Instance.Deserialize(ref reader, options));
|
|
|
|
- break;
|
|
|
|
- case MessagePackType.Array:
|
|
|
|
- //if (arrayFormatter == null) arrayFormatter = options.Resolver.GetFormatterWithVerify<JArray>();
|
|
|
|
- //result.Add(arrayFormatter?.Deserialize(ref reader, options));
|
|
|
|
- result.Add(Deserialize(ref reader, options));
|
|
|
|
- break;
|
|
|
|
- case MessagePackType.Integer: result.Add(reader.ReadInt64()); break;
|
|
|
|
- case MessagePackType.Boolean: result.Add(reader.ReadBoolean()); break;
|
|
|
|
- case MessagePackType.Float: result.Add(reader.ReadDouble()); break;
|
|
|
|
- case MessagePackType.String: result.Add(reader.ReadString()); break;
|
|
|
|
- case MessagePackType.Nil:
|
|
|
|
- result.Add(null);
|
|
|
|
- reader.Skip();
|
|
|
|
- break;
|
|
|
|
- default:
|
|
|
|
- result.Add(null);
|
|
|
|
- reader.Skip();
|
|
|
|
- break;
|
|
|
|
- }
|
|
|
|
|
|
|
|
- }
|
|
|
|
- }
|
|
|
|
- finally
|
|
|
|
- {
|
|
|
|
- reader.Depth--;
|
|
|
|
- }
|
|
|
|
|
|
|
|
|
|
|
|
- return result;
|
|
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ #region MessagePackFormatter_NewtonsoftAsString
|
|
|
|
+ class MessagePackFormatter_NewtonsoftAsString<NewtonsoftType> : IMessagePackFormatter<NewtonsoftType>
|
|
|
|
+ //where NewtonsoftType: Newtonsoft.Json.Linq.JToken
|
|
|
|
+ {
|
|
|
|
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
|
|
+ public void Serialize(
|
|
|
|
+ ref MessagePackWriter writer, NewtonsoftType value, MessagePackSerializerOptions options)
|
|
|
|
+ {
|
|
|
|
+ if (value == null)
|
|
|
|
+ {
|
|
|
|
+ writer.WriteNil();
|
|
|
|
+ return;
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+ var str = Serialization_Newtonsoft.Instance.SerializeToString(value);
|
|
|
|
+ writer.Write(str);
|
|
}
|
|
}
|
|
|
|
|
|
- #endregion
|
|
|
|
|
|
|
|
-
|
|
|
|
|
|
+ [MethodImpl(MethodImplOptions.AggressiveInlining)]
|
|
|
|
+ public NewtonsoftType Deserialize(
|
|
|
|
+ ref MessagePackReader reader, MessagePackSerializerOptions options)
|
|
|
|
+ {
|
|
|
|
+ if (reader.TryReadNil())
|
|
|
|
+ {
|
|
|
|
+ return default;
|
|
|
|
+ }
|
|
|
|
|
|
|
|
+ options.Security.DepthStep(ref reader);
|
|
|
|
+
|
|
|
|
+ var data = reader.ReadString();
|
|
|
|
+
|
|
|
|
+ reader.Depth--;
|
|
|
|
+
|
|
|
|
+ return Newtonsoft.Json.JsonConvert.DeserializeObject<NewtonsoftType>(data);
|
|
|
|
+ }
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+
|
|
|
|
+ #endregion
|
|
}
|
|
}
|
|
|
|
+
|
|
|
|
+#endregion
|