将二进制文件保存在Unity3d

问题描述

我正在尝试将两个元素(一个字符串和一个字符串列表)保存到二进制文件中。我在主脚本之外设置了类:

}
 the main script
}
[Serializable]
class SaveManager
{
    public string Info;
    public List<InfoSheetList> InfoSheetList ;

}

然后调用所有函数

public void GetInfoSheet() 
    {

        DatabaseManager.Instance.sqliteInit();
        string Info = PlayerPrefs.GetString ("Info");
        string date = PlayerPrefs.GetString ("Date");
        string Date=date.Replace("/","-");
        string Name = PlayerPrefs.GetString ("Name");
        string FilePath="C:/InfoSheets";

        DatabaseManager.Instance.sqliteInit();
        InfoSheetList.Clear();
        InfoSheetList= DatabaseManager.Instance.MakeInfoSheetList();
        Debug.Log("How many in the list " + InfoSheetList.Count);

        BinaryFormatter bf = new BinaryFormatter();
        FileStream fs = File.Create(FilePath + "/" +Date+Name+"InfoSheet.gig");
        Debug.Log (fs);
        SaveManager sm= new SaveManager();
        sm.Info=Info;
        sm.InfoSheetList=InfoSheetList;
        //PlayerPrefs.Deleteall ();

        bf.Serialize(fs,sm);
        fs.Close();
        Debug.Log(sm+ "Saved!");

只有我遇到一个例外- SerializationException:程序集“ Assembly-CSharp,版本= 0.0.0.0,区域性=中性,PublicKeyToken = null”中的类型“ InfoSheet”未标记为可序列化。 System.Runtime.Serialization.FormatterServices.InternalGetSerializableMembers(System.RuntimeType类型)(位于:0) System.Runtime.Serialization.FormatterServices + c__displayClass9_0.b__0(System.Runtime.Serialization.MemberHolder _)(位于:0) System.Collections.Concurrent.ConcurrentDictionary 2[TKey,TValue].GetorAdd (TKey key,System.Func 2 [T,TResult] valueFactory)(位于:0) System.Runtime.Serialization.FormatterServices.GetSerializableMembers(System.Type类型,System.Runtime.Serialization.StreamingContext上下文)(位于:0) System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitMemberInfo()(在:0处) System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitSerialize(System.Type对象类型,System.Runtime.Serialization.ISurrogateSelector代理选择器,System.Runtime.Serialization.StreamingContext上下文,System.Runtime.Serialization.Formatters.Binary.SerObjectInfoitit SerObjectinin System.Runtime.Serialization.IFormatterConverter转换器,System.Runtime.Serialization.SerializationBinder绑定程序)(为0) System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.Serialize(System.Type objectType,System.Runtime.Serialization.ISurrogateSelector surrogateSelector,System.Runtime.Serialization.StreamingContext上下文,System.Runtime.Serialization.Formatters.Binary.SerObjectInfoInit System.Runtime.Serialization.IFormatterConverter转换器,System.Runtime.Serialization.SerializationBinder绑定程序)(为0) System.Runtime.Serialization.Formatters.Binary.ObjectWriter.WriteArray(System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo objectInfo,System.Runtime.Serialization.Formatters.Binary.NameInfo memberNameInfo,System.Runtime.Serialization.Formatters.Binary。 WriteObjectInfo memberObjectInfo)(位于:0) System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Write(System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo objectInfo,System.Runtime.Serialization.Formatters.Binary.NameInfo memberNameInfo,System.Runtime.Serialization.Formatters.Binary。 NameInfo typeNameInfo)(位于:0) System.Runtime.Serialization.Formatters.Binary.ObjectWriter.Serialize(System.Object图,System.Runtime.Remoting.Messaging.Header [] inHeaders,System.Runtime.Serialization.Formatters.Binary .__ BinaryWriter serWriter,System.Boolean fCheck) (在:0) System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(System.IO.Stream序列化流,System.Object图,System.Runtime.Remoting.Messaging.Header []标头,System.Boolean fCheck)(在:0) System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(System.IO.Stream序列化Stream,System.Object图,System.Runtime.Remoting.Messaging.Header []标头)(位于:0) System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize(System.IO.Stream serializationStream,System.Object图)(位于:0) GigSheetManager.GetGigSheet()(在Assets / Scripts / GigSheetManager.cs:210) UnityEngine.Events.InvokableCall.Invoke()(在C:/buildslave/unity/build/Runtime/Export/UnityEvent.cs:166) UnityEngine.Events.UnityEvent.Invoke()(在C:/buildslave/unity/build/Runtime/Export/UnityEvent_0.cs:58) UnityEngine.UI.Button.Press()(在C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/UI/Core/Button.cs:36) UnityEngine.UI.Button.OnPointerClick(UnityEngine.EventSystems.PointerEventData eventData)(在C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/UI/Core/Button.cs:45) UnityEngine.EventSystems.ExecuteEvents.Execute(UnityEngine.EventSystems.IPointerClickHandler处理程序,UnityEngine.EventSystems.BaseEventData eventData)(在C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/EventSystem/ExecuteEvents.cs:50) UnityEngine.EventSystems.ExecuteEvents.Execute [T](UnityEngine.GameObject目标,UnityEngine.EventSystems.BaseEventData eventData,UnityEngine.EventSystems.ExecuteEvents + EventFunction`1 [T1]函子)(在C:/ buildslave / unity / build / Extensions / guisystem / UnityEngine.UI / EventSystem / ExecuteEvents.cs:261) UnityEngine.EventSystems.EventSystem:Update()

我想念的是什么。该字符串正在序列化,但列表没有。 预先感谢!

解决方法

亚历山大,你是对的。我要做的就是将System.Serializable添加到Infosheet类中。在我完成之后,它起作用了!谢谢!