Tanoda
pb_UnityTypeConverter.cs
Go to the documentation of this file.
1using UnityEngine;
2using Newtonsoft.Json;
3using Newtonsoft.Json.Serialization;
4using Newtonsoft.Json.Linq;
5using System.Reflection;
6using System;
7using System.Linq;
8
10{
16 public abstract class pb_UnityTypeConverter<T> : JsonConverter
17 {
22 public sealed override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
23 {
24 writer.WriteStartObject();
25 writer.WritePropertyName("$type");
26 writer.WriteValue(typeof(pb_ObjectContainer<T>).AssemblyQualifiedName);
27 writer.WritePropertyName("value");
28
29 WriteObjectJson(writer, value, serializer);
30
31 writer.WriteEndObject();
32 }
33
37 public abstract void WriteObjectJson(JsonWriter writer, object value, JsonSerializer serializer);
38
39 public sealed override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)
40 {
41 JObject o = JObject.Load(reader);
42
43 JProperty type = o.Property("$type");
44
45 if(type != null)
46 {
47 System.Type t = Type.GetType(type.Value.ToString());
48
49 if(t == typeof(pb_ObjectContainer<T>))
50 return (T) ((pb_ObjectContainer<T>)o.ToObject(typeof(pb_ObjectContainer<T>), serializer)).value;
51 }
52
53 return ReadJsonObject(o, objectType, existingValue, serializer);
54 }
55
59 public abstract object ReadJsonObject(JObject obj, Type objectType, object existingValue, JsonSerializer serializer);
60
64 public sealed override bool CanConvert(Type objectType)
65 {
66 return typeof(T).IsAssignableFrom(objectType) || typeof(pb_ObjectContainer<T>).IsAssignableFrom(objectType);
67 }
68 }
69}
sealed override bool CanConvert(Type objectType)
sealed override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer)
abstract void WriteObjectJson(JsonWriter writer, object value, JsonSerializer serializer)
abstract object ReadJsonObject(JObject obj, Type objectType, object existingValue, JsonSerializer serializer)
sealed override object ReadJson(JsonReader reader, Type objectType, object existingValue, JsonSerializer serializer)