5using Newtonsoft.Json.Serialization;
6using Newtonsoft.Json.Linq;
7using System.Reflection;
10using System.Collections;
11using System.Collections.Generic;
21 protected override JsonProperty
CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
23 JsonProperty
property = base.CreateProperty(member, memberSerialization);
25 property.ShouldSerialize = instance =>
31 if( pb_Reflection.HasIgnoredAttribute(member) )
34 if(member is PropertyInfo)
36 PropertyInfo prop = (PropertyInfo) member;
38 if (prop.CanRead && prop.CanWrite && !prop.IsSpecialName)
40 prop.GetValue(instance,
null);
44 else if(member is FieldInfo)
50 catch (System.Exception e) {
51 Debug.LogWarning(
"Can't create field \"" + member.Name +
"\" " + member.DeclaringType +
" -> " + member.ReflectedType +
"\n\n" + e.ToString());
66 if( typeof(
UnityEngine.Color).IsAssignableFrom(type) || typeof(
UnityEngine.Color32).IsAssignableFrom(type) )
67 return GetConverter<pb_ColorConverter>();
69 if( typeof(
UnityEngine.Matrix4x4).IsAssignableFrom(type) )
70 return GetConverter<pb_MatrixConverter>();
72 if( typeof(
UnityEngine.Vector2).IsAssignableFrom(type) ||
73 typeof(
UnityEngine.Vector3).IsAssignableFrom(type) ||
74 typeof(
UnityEngine.Vector4).IsAssignableFrom(type) ||
75 typeof(
UnityEngine.Quaternion).IsAssignableFrom(type) )
76 return GetConverter<pb_VectorConverter>();
78 if( typeof(
UnityEngine.Mesh).IsAssignableFrom(type))
79 return GetConverter<pb_MeshConverter>();
81 if( typeof(
UnityEngine.Material).IsAssignableFrom(type))
82 return GetConverter<pb_MaterialConverter>();
84 return base.ResolveContractConverter(type);
87 static Dictionary<Type, JsonConverter> converters =
new Dictionary<Type, JsonConverter>();
89 private static T GetConverter<T>() where T : JsonConverter, new()
93 if(converters.TryGetValue(typeof(T), out conv))
98 converters.Add(typeof(T), conv);
override JsonProperty CreateProperty(MemberInfo member, MemberSerialization memberSerialization)
override JsonConverter ResolveContractConverter(Type type)