- Home /
Save List in BinaryFormat
Hi everyone,
I already asked this in the past, none of the answers were great and I ended up using Hashtables, which I managed to serialize and save. However, Hashtables does not allow same items with same key, and I need a list for that. I tried the code below but it gives me an error. Could someone please help me with this?
Error; SerializationException: Type UnityEngine.MonoBehaviour in assembly UnityEngine, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null is not marked as serializable. System.Runtime.Serialization.FormatterServices.GetSerializableMembers (System.Type type, StreamingContext context) (at /Users/builduser/buildslave/mono-runtime-and-classlibs/build/mcs/class/corlib/System.Runtime.Serialization/FormatterServices.cs:101)
using UnityEngine;
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.Runtime.Serialization.Formatters.Binary;
using System.Runtime.Serialization;
using System.IO;
[System.Serializable]
public class ListSave : MonoBehaviour
{
string name;
string value;
void Start ()
{
}
void Update ()
{
// Debug.Log (UnityEngine.Random.Range (minValue, maxValue));
if (Input.GetKeyDown(KeyCode.H))
{
Serial();
Debug.Log ("Ser");
}
if (Input.GetKeyDown(KeyCode.L))
{
Deserialize();
}
}
[SerializeField]
public ListSave ( string newName, string newValue)
{
name = newName;
value = newValue;
}
public static void Serial ()
{
// Create a hashtable of values that will eventually be serialized.
List <ListSave> addresses = new List<ListSave> ();
addresses.Add ( new ListSave ("Chest", "Sword"));
addresses.Add ( new ListSave("Chest", "Shield"));
addresses.Add ( new ListSave("Chest1", "Shield"));
foreach (ListSave de in addresses)
{
print (de.name + de.value );
}
// you must first open a stream for writing.
// In this case, use a file stream.
FileStream fs = new FileStream("DataFile.dat", FileMode.Create);
// Construct a BinaryFormatter and use it to serialize the data to the stream.
// BinaryFormatter formatter = new BinaryFormatter();
try
{
new BinaryFormatter().Serialize (fs, addresses);
// formatter.Serialize(fs, addresses);
}
catch (SerializationException e)
{
Debug.Log ("Failed to serialize. Reason: " + e.Message);
throw;
}
finally
{
fs.Close();
}
}
static void Deserialize()
{
//whatever code,
}
}
Thank you in advance,
Would anyone be able to help me with this? I found a way around to use List and sabe it, however I am still curious to know how to serialize/sabe a List using an script similar to this one.
Your answer
Follow this Question
Related Questions
A node in a childnode? 1 Answer
How to constantly save game progress? 1 Answer
Saving 3D color array to file 1 Answer
Checkpoint autosave Method? 0 Answers
Save files for a game 1 Answer