private static object DeserializeStart(JObject jObject) { JToken typeToken = jObject["type"]; JToken originToken = jObject["origin"]; string typeString = typeToken.Value <string>(); string assemblyString = originToken.Value <string>(); string combined = Assembly.CreateQualifiedName(assemblyString, typeString); Type type = Type.GetType(combined); if (type == null) { return(null); } object objInstance = null; if (type.IsSubclassOf(typeof(ScriptableObject))) { objInstance = ScriptableObject.CreateInstance(type); } if (objInstance == null) { objInstance = FormatterServices.GetSafeUninitializedObject(type); } if (objInstance == null) { return(null); } IAdventuresUnknownSerializeCallback auSerializeCB = objInstance as IAdventuresUnknownSerializeCallback; if (auSerializeCB != null) { auSerializeCB.InitializeObject(); } return(objInstance); }
public static object DeserializeFull(JObject jObject) { object result = DeserializeStart(jObject); if (result != null) { Type type = result.GetType(); JToken contentToken = jObject["content"]; FieldInfo[] members = GetSerializableFields(type); IAdventuresUnknownSerializer auSerializer = result as IAdventuresUnknownSerializer; if (auSerializer != null) { auSerializer.Deserialize(contentToken);//, members); } else { foreach (FieldInfo member in members) { DeserializeObject(contentToken[member.Name], member, result); } } IAdventuresUnknownSerializeCallback auSerializeCB = result as IAdventuresUnknownSerializeCallback; if (auSerializeCB != null) { auSerializeCB.OnAfterDeserialize(); } } return(result); }
public static void SerializeStart(JsonTextWriter jsonTextWriter, object obj) { IAdventuresUnknownSerializeCallback auSerializeCB = obj as IAdventuresUnknownSerializeCallback; if (auSerializeCB != null) { auSerializeCB.OnBeforeSerialize(); } Type type = obj.GetType(); jsonTextWriter.WriteStartObject(); jsonTextWriter.WritePropertyName("type"); jsonTextWriter.WriteValue(type.FullName); jsonTextWriter.WritePropertyName("origin"); jsonTextWriter.WriteValue(Assembly.GetAssembly(type).GetName().Name); jsonTextWriter.WritePropertyName("content"); jsonTextWriter.WriteStartObject(); }