TapJsonConverter.cs 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. using System;
  2. using System.Collections.Generic;
  3. using Newtonsoft.Json;
  4. namespace TapSDK.Core.Internal.Json {
  5. public class TapJsonConverter : JsonConverter {
  6. public override bool CanConvert(Type objectType) {
  7. return objectType == typeof(object);
  8. }
  9. public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) {
  10. serializer.Serialize(writer, value);
  11. }
  12. public override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer) {
  13. if (reader.TokenType == JsonToken.StartObject) {
  14. var obj = new Dictionary<string, object>();
  15. serializer.Populate(reader, obj);
  16. return obj;
  17. }
  18. if (reader.TokenType == JsonToken.StartArray) {
  19. var arr = new List<object>();
  20. serializer.Populate(reader, arr);
  21. return arr;
  22. }
  23. if (reader.TokenType == JsonToken.Integer) {
  24. if ((long)reader.Value < int.MaxValue) {
  25. return Convert.ToInt32(reader.Value);
  26. }
  27. }
  28. if (reader.TokenType == JsonToken.Float) {
  29. return Convert.ToSingle(reader.Value);
  30. }
  31. return serializer.Deserialize(reader);
  32. }
  33. public readonly static TapJsonConverter Default = new TapJsonConverter();
  34. }
  35. }