簡體   English   中英

在 Unity3d 中保存二進制文件時的序列化豁免

[英]serialization exemption when saving a binary file in Unity3d

我正在嘗試將兩個元素,一個字符串和一個字符串列表保存到二進制文件中。 我在主腳本之外設置了 class :

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

}

然后調用它的 function

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,Version = 0.0.0.0,Culture = Neutral,PublicKeyToken = null'中鍵入'InfoSheet'未標記為可序列化。 System.Runtime.Serialization.FormatterServices.InternalGetSerializableMembers (System.RuntimeType 類型) (at:0) System.Runtime.Serialization.FormatterServices+<>c__DisplayClass9_0.b__0 (System.Runtime.Serialization.MemberHolder _) (at:0) System.Collections .Concurrent.ConcurrentDictionary 2[TKey,TValue].GetOrAdd (TKey key, System.Func 2[T,TResult] valueFactory) (at:0) System.Runtime.Serialization.FormatterServices.GetSerializableMembers (System.Type type, System.Runtime .Serialization.StreamingContext 上下文) (at:0) System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitMemberInfo () (at:0) System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitSerialize (System.Type objectType, System.Runtime.Serialization.ISurrogateSelector surrogateSelector, System.Runtime.Serialization.StreamingContext 上下文, System.Runtime.Serialization.Formatters.Binary.SerObjectInfoInit serObjectInfoInit, System.Runtime.Serialization.IFormatterConverter 轉換器, S ystem.Runtime.Serialization.SerializationBinder binder) (at: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 serObjectInfoInit, System.Runtime.Serialization.IFormatterConverter 轉換器, System.Runtime.Serialization.SerializationBinder binder) (at: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) (at:0) System.Runtime.Serialization .Formatters.Binary.ObjectWriter.Write (System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo objectInfo, System.Runtime.Serialization.Formatters.Binary.NameInfo 成員 erNameInfo, System.Runtime.Serialization.Formatters.Binary.NameInfo typeNameInfo) (at: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) (at:0) System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize (System.IO.Stream serializationStream, System.Object graph , System.Runtime.Remoting.Messaging.Header[] headers, System.Boolean fCheck) (at:0) System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize (System.IO.Stream serializationStream, System.Object graph, System.Runtime.Remoting.Messaging.Header[] 標頭)(在: 0) System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize (System.IO.Stream serializationStream, System.Object graph) (at:0) GigSheetManager.GetGigSheet () (at Assets/Scripts/GigSheetManager.cs:210) UnityEngine.Events.InvokableCall.Invoke () (at C:/buildslave/unity/build/Runtime/Export/UnityEvent.cs:166) UnityEngine.Events.UnityEvent.Invoke () (at Z0D61F8370CAD1D412F80B84D143E12/build75/buildave 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 (統一 Engine.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 Class。 在我這樣做之后,它起作用了! 謝謝!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM