private static void _DeserializationHandler(out Vector2 output, SerializedObjectNode serializedNode, Type baseType) { string[] parts = serializedNode.Value.Split(' '); output.x = float.Parse(parts[0]); output.y = float.Parse(parts[1]); }
/// <summary> /// Creates a serialized object from an XmlNode that is the child of a parent node /// </summary> /// <param name="node">The xml node that this serialized object is wrapping</param> /// <param name="parentNode">The parent node that we are a part of</param> protected SerializedObjectNode(XmlNode node, SerializedObjectNode parentNode) { m_xmlNode = node; m_parentNode = parentNode; if (m_xmlNode.Attributes != null) { XmlAttribute versionAttribute = m_xmlNode.Attributes["version"]; if (versionAttribute != null) { string fullVersionString = versionAttribute.Value; while (!string.IsNullOrEmpty(fullVersionString)) { int versionNameDelimiterIndex = fullVersionString.IndexOf(','); string versionName = versionNameDelimiterIndex < 0 ? fullVersionString : fullVersionString.Substring(0, versionNameDelimiterIndex); if (versionNameDelimiterIndex > -1) fullVersionString = fullVersionString.Substring(versionNameDelimiterIndex + 1); else fullVersionString = null; SerializedVersionInfo newVersionInfo = SerializedVersionInfo.Parse(versionName); m_versionInfo.AddFirst(newVersionInfo); } } } foreach (XmlNode childNode in m_xmlNode.ChildNodes) { SerializedObjectNode newChildNode = new SerializedObjectNode(childNode, this); m_children.Add(childNode.Name, newChildNode); } }
/// <summary> /// Creates a new serialized object to serialize into. /// </summary> public SerializedObject() { XmlDocument document = new XmlDocument(); m_rootXmlNode = document.CreateElement("root"); document.AppendChild(m_rootXmlNode); m_rootNode = new SerializedObjectNode(m_rootXmlNode); }
/// <summary> /// Creates a serialized object. /// </summary> /// <param name="stream">The stream to read the serialized object data from.</param> public SerializedObject(Stream stream) { XmlReader reader = XmlReader.Create(stream); XmlDocument document = new XmlDocument(); document.Load(reader); m_rootXmlNode = document["root"]; m_rootNode = new SerializedObjectNode(m_rootXmlNode); }
private static void _DeserializationHandler(out object output, SerializedObjectNode serializedNode, Type baseType) { if (serializedNode.Value == "NULL") { output = null; return; } Type type = baseType; output = Activator.CreateInstance(type); //apply version updating Type expectedType = type; foreach (SerializedVersionInfo serializedVersionInfo in serializedNode.IterateVersionInfo()) { Type savedType = TypeHelper.GetType(serializedVersionInfo.TypeName); if (savedType == expectedType || savedType == null) { SerializedVersionInfo currentVersionInfo = SerializedVersionInfo.Create(expectedType); for (int i = serializedVersionInfo.VersionNumber + 1; i <= currentVersionInfo.VersionNumber; i++) { MethodInfo upgradeMethodInfo = expectedType.GetMethod(string.Format("_UpgradeToVersion{0}", i), BindingFlags.Static | BindingFlags.NonPublic, null, new[] {typeof(SerializedObjectNode)}, null); if (upgradeMethodInfo != null) { foreach (SerializedObjectNode childNode in serializedNode.IterateChildren()) { upgradeMethodInfo.Invoke(null, new object[] {childNode}); } } } } if (expectedType != null) expectedType = expectedType.BaseType; } foreach (SerializedObjectNode childNode in serializedNode.IterateChildren()) { FieldInfo field = TypeHelper.GetField(type, childNode.Name); if (field == null) continue; Type fieldType = field.FieldType; object fieldObject; _InvokeDeserializerHandler(out fieldObject, childNode, fieldType); field.SetValue(output, fieldObject); } }
/// <summary> /// Creates a serialized object. /// </summary> /// <param name="document">The XmlDocument to read from.</param> public SerializedObject(XmlDocument document) { m_rootXmlNode = document["root"]; if (m_rootXmlNode == null) { m_rootXmlNode = document.CreateElement("root"); document.AppendChild(m_rootXmlNode); } m_rootNode = new SerializedObjectNode(m_rootXmlNode); }
/// <summary> /// Creates a serialized object. /// </summary> /// <param name="file">The file to read the serialized object from.</param> public SerializedObject(string file) { using (FileStream stream = new FileStream(file, FileMode.Open, FileAccess.Read)) { XmlReader reader = XmlReader.Create(stream); XmlDocument document = new XmlDocument(); document.Load(reader); m_rootXmlNode = document["root"]; m_rootNode = new SerializedObjectNode(m_rootXmlNode); } }
private static void _SerializationHandler(IList target, SerializedObjectNode targetNode) { int count = target.Count; for (int i = 0; i < count; i++) { SerializedObjectNode node = targetNode.CreateChild("entry" + i); object value = target[i]; _InvokeSerializerHandler(value, node); } }
private static void _SerializationHandler(Array target, SerializedObjectNode targetNode) { Assert.AreEqual(1, target.Length); int count = target.Length; for (int i = 0; i < count; i++) { SerializedObjectNode node = targetNode.CreateChild("entry" + i); object value = target.GetValue(i); _InvokeSerializerHandler(value, node); } }
private static void _SerializationHandler(IDictionary target, SerializedObjectNode targetNode) { int i = 0; foreach (object key in target.Keys) { SerializedObjectNode node = targetNode.CreateChild("entry" + i); SerializedObjectNode keyNode = node.CreateChild("key"); SerializedObjectNode valueNode = node.CreateChild("value"); _InvokeSerializerHandler(key, keyNode); _InvokeSerializerHandler(target[key], valueNode); i++; } }
private static void _DeserializationHandler(out IList output, SerializedObjectNode serializedNode, Type baseType) { Type elementType = baseType.GetElementType(); output = Activator.CreateInstance(baseType) as IList; Assert.IsNotNull(output); foreach (SerializedObjectNode child in serializedNode.IterateChildren()) { object element = FormatterServices.GetUninitializedObject(elementType); _InvokeDeserializerHandler(out element, child, elementType); output.Add(element); } }
private static void _SerializationHandler(object target, SerializedObjectNode targetNode) { Type targetType = target.GetType(); FieldInfo[] fields = TypeHelper.GetFields(targetType, typeof (SerializeField), true); foreach (FieldInfo fieldInfo in fields) { SerializedObjectNode fieldNode = targetNode.CreateChild(fieldInfo.Name); object fieldValue = fieldInfo.GetValue(target); _InvokeSerializerHandler(fieldValue, fieldNode); } targetNode.SetVersionInfo(targetType); }
private static void _DeserializationHandler(out Array output, SerializedObjectNode serializedNode, Type baseType) { int length = serializedNode.GetChildCount(); Type elementType = baseType.GetElementType(); output = Array.CreateInstance(elementType, length); int i = 0; foreach (SerializedObjectNode serializedObjectNode in serializedNode.IterateChildren()) { object element; _InvokeDeserializerHandler(out element, serializedObjectNode, elementType); output.SetValue(element, i); i++; } }
private static void _DeserializationHandler(out string output, SerializedObjectNode serializedNode, Type baseType) { output = serializedNode.Value; }
private static void _UpgradeToVersion1(SerializedObjectNode field) { if(field.Name == "a") field.Rename("d"); }
private static void _SerializationHandler(Quaternion target, SerializedObjectNode targetNode) { targetNode.Value = string.Format("{0} {1} {2} {3}", target.x, target.y, target.z, target.w); }
/// <summary> /// Creates a child node under this node. /// </summary> /// <param name="name">The name of the child node to create.</param> /// <returns>The new child node.</returns> public SerializedObjectNode CreateChild(string name) { XmlNode xmlChildNode = m_xmlNode.OwnerDocument.CreateElement(name); m_xmlNode.AppendChild(xmlChildNode); SerializedObjectNode childNode = new SerializedObjectNode(xmlChildNode, this); m_children.Add(name, childNode); return childNode; }
private static void _DeserializationHandler(out char output, SerializedObjectNode serializedNode, Type baseType) { Assert.AreEqual(1, serializedNode.Value.Length); output = serializedNode.Value[0]; }
private static void _SerializationHandler(Vector3 target, SerializedObjectNode targetNode) { targetNode.Value = string.Format("{0} {1} {2}", target.x, target.y, target.z); }
private static void _DeserializationHandler(out float output, SerializedObjectNode serializedNode, Type baseType) { output = float.Parse(serializedNode.Value); }
private static void _DeserializationHandler(out TimeSpan output, SerializedObjectNode serializedNode, Type baseType) { output = TimeSpan.Parse(serializedNode.Value); }
private static void _SerializationHandler(TimeSpan target, SerializedObjectNode targetNode) { targetNode.Value = target.ToString(); }
private static void _SerializationHandler(string target, SerializedObjectNode targetNode) { targetNode.Value = target; }
private static void _DeserializationHandler(out IDictionary output, SerializedObjectNode serializedNode, Type baseType) { Type[] genericArgumenTypes = baseType.GetGenericArguments(); output = Activator.CreateInstance(baseType) as IDictionary; Assert.IsNotNull(output); if (genericArgumenTypes.Length == 0) genericArgumenTypes = new[] { typeof(object), typeof(object) }; Type keyType = genericArgumenTypes[0]; Type valueType = genericArgumenTypes[1]; foreach (SerializedObjectNode serializedObjectNode in serializedNode.IterateChildren()) { SerializedObjectNode keyNode = serializedObjectNode["key"]; SerializedObjectNode valueNode = serializedObjectNode["value"]; object key; object value; _InvokeDeserializerHandler(out key, keyNode, keyType); _InvokeDeserializerHandler(out value, valueNode, valueType); output.Add(key, value); } }
private static void _SerializationHandler(DateTime target, SerializedObjectNode targetNode) { targetNode.Value = target.ToString(CultureInfo.InvariantCulture); }