[英]serialization exemption when saving a binary file in Unity3d
I'm trying to save two elements, a string and a list of strings to a binary file.我正在尝试将两个元素,一个字符串和一个字符串列表保存到二进制文件中。 I have the class set outside the main script:我在主脚本之外设置了 class :
}
the main script
}
[Serializable]
class SaveManager
{
public string Info;
public List<InfoSheetList> InfoSheetList ;
}
Then the function that calls it all然后调用它的 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!");
Only I'm getting an exception- SerializationException: Type 'InfoSheet' in Assembly 'Assembly-CSharp, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' is not marked as serializable.只有我得到一个异常-SerializationException:在程序集'Assembly-CSharp,Version = 0.0.0.0,Culture = Neutral,PublicKeyToken = null'中键入'InfoSheet'未标记为可序列化。 System.Runtime.Serialization.FormatterServices.InternalGetSerializableMembers (System.RuntimeType type) (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 context) (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 context, System.Runtime.Serialization.Formatters.Binary.SerObjectInfoInit serObjectInfoInit, System.Runtime.Serialization.IFormatterConverter converter, S 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 context, System.Runtime.Serialization.Formatters.Binary.SerObjectInfoInit serObjectInfoInit, System.Runtime.Serialization.IFormatterConverter converter, 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 memb 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 graph, 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[] headers) (at: 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 C:/buildslave/unity/build/Runtime/Export/UnityEvent_0.cs:58) UnityEngine.UI.Button.Press () (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/UI/Core/Button.cs:36) UnityEngine.UI.Button.OnPointerClick (UnityEngine.EventSystems.PointerEventData eventData) (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/UI/Core/Button.cs:45) UnityEngine.EventSystems.ExecuteEvents.Execute (Unity 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 handler, UnityEngine.EventSystems.BaseEventData eventData) (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/EventSystem/ExecuteEvents.cs:50) UnityEngine.EventSystems.ExecuteEvents.Execute[T] (UnityEngine.GameObject target, UnityEngine.EventSystems.BaseEventData eventData, UnityEngine.EventSystems.ExecuteEvents+EventFunction`1[T1] functor) (at C:/buildslave/unity/build/Extensions/guisystem/UnityEngine.UI/EventSystem/ExecuteEvents.cs:261) UnityEngine.EventSystems.EventSystem:Update() 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()
What am I missing.我错过了什么。 The string is serializing, but the list is not.字符串正在序列化,但列表不是。 Thanks in advance!提前致谢!
Alexander, you are right.亚历山大,你是对的。 All I had to do is to add System.Serializable to the Infosheet Class.我所要做的就是将 System.Serializable 添加到 Infosheet Class。 After I did that it worked!在我这样做之后,它起作用了! Thanks!谢谢!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.