public override void OnBeforeSerialize() { array = null; if (((typeCode & SerializableTypeCode.Array) == SerializableTypeCode.Array) || ((typeCode & SerializableTypeCode.List) == SerializableTypeCode.List)) { if (value != null) { if ((typeCode & SerializableTypeCode.Array) == SerializableTypeCode.Array) { SerializableTypeCode elemType = typeCode & (~SerializableTypeCode.Array); var arr = value as Array; if (arr != null) { array = new SerializableValue[arr.Length]; for (int i = 0; i < arr.Length; i++) { array[i] = new SerializableValue(elemType, arr.GetValue(i)); } } } if ((typeCode & SerializableTypeCode.List) == SerializableTypeCode.List) { SerializableTypeCode elemType = typeCode & (~SerializableTypeCode.List); var list = value as IList; if (list != null) { array = new SerializableValue[list.Count]; for (int i = 0; i < list.Count; i++) { array[i] = new SerializableValue(elemType, list[i]); } } } } if (array != null && array.Length > 0) { for (int i = 0; i < array.Length; i++) { array[i].OnBeforeSerialize(); } } return; } base.OnBeforeSerialize(); }
public static object DeserializeFromString(SerializableTypeCode typeCode, string str) { object value = null; switch (typeCode) { case SerializableTypeCode.String: value = str; break; case SerializableTypeCode.Double: { double n; if (double.TryParse(str, out n)) { value = n; } else { value = 0d; } } break; case SerializableTypeCode.Single: { float n; if (float.TryParse(str, out n)) { value = n; } else { value = 0f; } } break; case SerializableTypeCode.Int32: { int n; if (int.TryParse(str, out n)) { value = n; } else { value = 0; } } break; case SerializableTypeCode.Boolean: { bool b; if (bool.TryParse(str, out b)) { value = b; } else { value = false; } } break; case SerializableTypeCode.Vector2: { Vector2 v = new Vector2(); float n; string[] parts = str.Split(','); for (int i = 0; i < parts.Length; i++) { if (float.TryParse(parts[i], out n)) { v[i] = n; } } value = v; } break; case SerializableTypeCode.Vector2Int: { Vector2Int v = new Vector2Int(); int n; string[] parts = str.Split(','); for (int i = 0; i < parts.Length; i++) { if (int.TryParse(parts[i], out n)) { v[i] = n; } } value = v; } break; case SerializableTypeCode.Vector3: { Vector3 v = new Vector3(); float n; string[] parts = str.Split(','); for (int i = 0; i < parts.Length; i++) { if (float.TryParse(parts[i], out n)) { v[i] = n; } } value = v; } break; case SerializableTypeCode.Vector3Int: { Vector3Int v = new Vector3Int(); int n; string[] parts = str.Split(','); for (int i = 0; i < parts.Length; i++) { if (int.TryParse(parts[i], out n)) { v[i] = n; } } value = v; } break; case SerializableTypeCode.Vector4: { Vector4 v = new Vector4(); float n; string[] parts = str.Split(','); for (int i = 0; i < parts.Length; i++) { if (float.TryParse(parts[i], out n)) { v[i] = n; } } value = v; } break; case SerializableTypeCode.Color: { Color v = new Color(); float n; string[] parts = str.Split(','); for (int i = 0; i < parts.Length; i++) { if (float.TryParse(parts[i], out n)) { v[i] = n; } } value = v; } break; case SerializableTypeCode.Color32: { Color32 v = new Color32(); byte n; string[] parts = str.Split(','); for (int i = 0; i < parts.Length; i++) { if (byte.TryParse(parts[i], out n)) { switch (i) { case 0: v.r = n; break; case 1: v.g = n; break; case 2: v.b = n; break; case 3: v.a = n; break; } } } value = v; } break; case SerializableTypeCode.AnimationCurve: AnimationCurve curve; if (!TryParseCurve(str, out curve)) { curve = AnimationCurve.Linear(0f, 0f, 1f, 1f); } value = curve; break; } return(value); }
public static string SerializeToString(SerializableTypeCode typeCode, object value) { string str = null; switch (typeCode) { case SerializableTypeCode.String: str = value as string; break; case SerializableTypeCode.Vector2: { Vector2 v = (Vector2)value; str = v.x.ToString() + "," + v.y.ToString(); } break; case SerializableTypeCode.Vector2Int: { Vector2Int v = (Vector2Int)value; str = v.x.ToString() + "," + v.y.ToString(); } break; case SerializableTypeCode.Vector3: { Vector3 v = (Vector3)value; str = v.x + "," + v.y + "," + v.z; } break; case SerializableTypeCode.Vector3Int: { Vector3Int v = (Vector3Int)value; str = v.x + "," + v.y + "," + v.z; } break; case SerializableTypeCode.Vector4: { Vector4 v = (Vector4)value; str = v.x + "," + v.y + "," + v.z + "," + v.w; } break; case SerializableTypeCode.Color: { Color v = (Color)value; str = v.r + "," + v.g + "," + v.b + "," + v.a; } break; case SerializableTypeCode.Color32: { Color32 v = (Color32)value; str = v.r + "," + v.g + "," + v.b + "," + v.a; } break; case SerializableTypeCode.AnimationCurve: AnimationCurve curve = (AnimationCurve)value; str = ToCurveString(curve); break; default: if (value != null) { str = value.ToString(); } break; } return(str); }
public static Type SerializableTypeCodeToType(SerializableTypeCode typeCode) { if ((typeCode & SerializableTypeCode.Array) == SerializableTypeCode.Array) { return(SerializableTypeCodeToType(typeCode).MakeArrayType()); } if ((typeCode & SerializableTypeCode.List) == SerializableTypeCode.List) { return(typeof(List <>).MakeGenericType(SerializableTypeCodeToType(typeCode))); } switch (typeCode) { case SerializableTypeCode.String: return(typeof(string)); case SerializableTypeCode.Int32: return(typeof(int)); case SerializableTypeCode.Single: return(typeof(float)); case SerializableTypeCode.Boolean: return(typeof(bool)); case SerializableTypeCode.DBNull: return(typeof(DBNull)); case SerializableTypeCode.Char: return(typeof(char)); case SerializableTypeCode.SByte: return(typeof(sbyte)); case SerializableTypeCode.Byte: return(typeof(byte)); case SerializableTypeCode.Int16: return(typeof(short)); case SerializableTypeCode.Int64: return(typeof(long)); case SerializableTypeCode.UInt16: return(typeof(ushort)); case SerializableTypeCode.UInt32: return(typeof(uint)); case SerializableTypeCode.UInt64: return(typeof(ulong)); case SerializableTypeCode.Double: return(typeof(double)); case SerializableTypeCode.Decimal: return(typeof(decimal)); case SerializableTypeCode.DateTime: return(typeof(DateTime)); case SerializableTypeCode.UnityObject: return(typeof(UnityEngine.Object)); case SerializableTypeCode.Vector2: return(typeof(Vector2)); case SerializableTypeCode.Vector2Int: return(typeof(Vector2Int)); case SerializableTypeCode.Vector3: return(typeof(Vector3)); case SerializableTypeCode.Vector3Int: return(typeof(Vector3Int)); case SerializableTypeCode.Vector4: return(typeof(Vector4)); case SerializableTypeCode.Color: return(typeof(Color)); case SerializableTypeCode.Color32: return(typeof(Color32)); case SerializableTypeCode.AnimationCurve: return(typeof(AnimationCurve)); } return(typeof(object)); }
public SerializableValue(SerializableTypeCode typeCode, object value) { this.typeCode = typeCode; this.value = value; }
public static SerializableTypeCode TypeToSerializableTypeCode(Type type) { var typeCode = (SerializableTypeCode)Type.GetTypeCode(type); SerializableTypeCode elemTypeCode; if (type.IsArray) { elemTypeCode = TypeToSerializableTypeCode(type.GetElementType()); if (elemTypeCode != SerializableTypeCode.Object) { typeCode = SerializableTypeCode.Array | elemTypeCode; } } if (type.IsGenericType) { elemTypeCode = TypeToSerializableTypeCode(type.GetGenericArguments()[0]); if (type.GetGenericTypeDefinition() == typeof(List <>) && elemTypeCode != SerializableTypeCode.Object) { typeCode = SerializableTypeCode.List | elemTypeCode; } } if (typeCode == SerializableTypeCode.Object) { if (typeof(UnityEngine.Object).IsAssignableFrom(type)) { typeCode = SerializableTypeCode.UnityObject; } else { if (type == typeof(Vector2)) { typeCode = SerializableTypeCode.Vector2; } else if (type == typeof(Vector2Int)) { typeCode = SerializableTypeCode.Vector2Int; } else if (type == typeof(Vector3)) { typeCode = SerializableTypeCode.Vector3; } else if (type == typeof(Vector3Int)) { typeCode = SerializableTypeCode.Vector3Int; } else if (type == typeof(Vector4)) { typeCode = SerializableTypeCode.Vector4; } else if (type == typeof(Color)) { typeCode = SerializableTypeCode.Color; } else if (type == typeof(Color32)) { typeCode = SerializableTypeCode.Color32; } else if (type == typeof(AnimationCurve)) { typeCode = SerializableTypeCode.AnimationCurve; } } } return(typeCode); }
public SerializableValue(SerializableTypeCode typeCode) { this.typeCode = typeCode; }
public SerializableItemValue(TypeCode typeCode) { this.typeCode = (SerializableTypeCode)typeCode; }