private void SerialiseObject(XmlTextWriter writer, SerialisableObject serialisableObject) { List <SavePair> pairs = new List <SavePair>(); writer.WriteStartElement("entry"); writer.WriteAttributeString("id", serialisableObject.GUID.ToString()); // Dump the object-name into the save file if debugging if (OutputDebugInfo) { writer.WriteAttributeString("debug_name", serialisableObject.name); } serialisableObject.Serialise(pairs); for (int pairID = 0; pairID < pairs.Count; ++pairID) { writer.WriteStartElement("pair"); writer.WriteAttributeString("id", pairs[pairID].id); writer.WriteAttributeString("value", pairs[pairID].value); writer.WriteEndElement(); } writer.WriteEndElement(); }
public void Deserialise() { Dictionary <string, SerialisableObject> objects = new Dictionary <string, SerialisableObject>(); SerialisableObject[] serialisableObjects = Resources.FindObjectsOfTypeAll(typeof(SerialisableObject)) as SerialisableObject[]; // Create a dictionary of all the serialisable objects in the scene, to prevent iteration later. foreach (var currentObject in serialisableObjects) { if (objects.ContainsKey(currentObject.GUID)) { Debug.LogError("Duplicate key found for item " + currentObject.gameObject.name + ".\n Object will not be deserialised"); } else { objects.Add(currentObject.GUID, currentObject); } } XmlDocument saveFile = new XmlDocument(); saveFile.Load("testSave.xml"); XmlNodeList entries = saveFile.GetElementsByTagName("entry"); for (int entryID = 0; entryID < entries.Count; ++entryID) { List <SavePair> pairs = new List <SavePair>(); XmlNode entryNode = entries.Item(entryID); string guid = entryNode.Attributes.GetNamedItem("id").Value; for (int childID = 0; childID < entryNode.ChildNodes.Count; ++childID) { string id = entryNode.ChildNodes[childID].Attributes.GetNamedItem("id").Value; string value = entryNode.ChildNodes[childID].Attributes.GetNamedItem("value").Value; pairs.Add(new SavePair(id, value)); } SerialisableObject targetObject = null; objects.TryGetValue(guid, out targetObject); if (targetObject != null) { targetObject.Deserialise(pairs); } else if (OutputDebugInfo) { Debug.Log("Dead ID found: " + guid.ToString()); } } }
public async Task Successful_Serialisation_Will_Return_A_Stream_Of_The_Serialised_Object() { //Arrange var obj = new SerialisableObject(); var settings = new DefaultSettingsProvider(); var serialiser = new NSJsonSerializer(settings) as ISerialiser; //Act var result = await serialiser.Serialise(obj); //Assert Assert.That(result, Is.Not.Null); }
public async Task DeserialisingToJsonObject() { //Arrange var obj = new SerialisableObject(); var settings = new DefaultSettingsProvider(); var serialiser = new NSJsonSerializer(settings); var serialised = await serialiser.SerialiseToJson(obj); //Act var result = await serialiser.DeserialiseFromJson(serialised); //Assert Assert.That(result, Is.Not.Null); Assert.That(result, Is.TypeOf <JObject>()); }
public async Task Successful_Deserialisation_Will_Return_An_Object_Of_Type_Specified() { //Arrange var obj = new SerialisableObject(); var settings = new DefaultSettingsProvider(); var serialiser = new NSJsonSerializer(settings); var serialised = await serialiser.SerialiseToJson(obj); //Act var result = await serialiser.DeserialiseFromJson <SerialisableObject>(serialised); //Assert Assert.That(result, Is.Not.Null); Assert.That(result, Is.TypeOf <SerialisableObject>()); }
public async Task Providing_A_Base_Class_Will_Cast_The_Return_The_Object_Cast_To_The_Base_Class() { //Arrange var obj = new SerialisableObject(); var settings = new DefaultSettingsProvider(); var serialiser = new NSJsonSerializer(settings) as ISerialiser; var stream = await serialiser.Serialise(obj); stream.Position = 0; //Act var result = await serialiser.Deserialise <SerialisableObject>(stream); //Assert Assert.That(result, Is.Not.Null); Assert.That(result, Is.TypeOf <SerialisableObject>()); }
public static void SaveDeserialise(List <SavePair> pairs) { Debug.Log("Deserialising inventory..."); // Flush the current dictionary Inventory.Contents.Clear(); InventoryObject[] inventoryObjects = Resources.FindObjectsOfTypeAll(typeof(InventoryObject)) as InventoryObject[]; // Create a dictionary of inventory objects with their guids as a key. // This should make a shift to O(m+n) instead of O(mn) Dictionary <string, InventoryObject> objectDictionary = new Dictionary <string, InventoryObject>(); foreach (var current in inventoryObjects) { SerialisableObject serialisableObject = current.GetComponent <SerialisableObject>(); if (serialisableObject != null) { objectDictionary.Add(serialisableObject.GUID, current); } else { Debug.LogWarning("Cannot deserialise inventory-item \"" + current.name + "\" as it does not have a SerialisableObject attached"); } } // Run through each guid and add the corresponding InventoryObject. // The objects themselves are deserialised in their own scripts. foreach (var pair in pairs) { string guid = pair.value; InventoryObject target = null; if (objectDictionary.TryGetValue(guid, out target)) { Debug.Log("Deserialised: " + target.name); Inventory.AddToInventory(target); } else { Debug.LogWarning("Failed to deserialise inventory-object with guid: " + guid); } } }
public async Task Successful_Deserialisation_Will_Return_An_Object() { //Arrange var obj = new SerialisableObject(); var settings = new DefaultSettingsProvider(); var serialiser = new NSJsonSerializer(settings) as ISerialiser; var stream = await serialiser.Serialise(obj); stream.Position = 0; //Act var result = await serialiser.Deserialise <SerialisableObject>(stream); //Assert Assert.That(result.Number, Is.EqualTo(obj.Number)); Assert.That(result.Words, Is.EqualTo(obj.Words)); Assert.That(result, Is.TypeOf <SerialisableObject>()); }
public static void SaveSerialise(List <SavePair> pairs) { int index = 0; foreach (var item in Inventory.Contents) { SerialisableObject itemSave = item.gameObject.GetComponent <SerialisableObject>() as SerialisableObject; if (itemSave != null) { pairs.Add(new SavePair("inventory_item_" + index, itemSave.GUID.ToString())); index++; } else { Debug.LogWarning("Cannot save inventory-item \"" + item.name + "\" as it does not have a SerialisableObject attached"); } } }