Je fais face à un soucis et mal gré mes recherches sur le net, je n'ai pas trouvé de solution. Plusieurs personnes ont eu ce soucis mais ce qui a marché pour eux n'a pas marché pour moi.
Je fais face à "SerializationException".
Le message d'erreur complet :
Voici le code du script SaveSystem :"SerializationException: Type 'BuyShip2Button' in Assembly 'Assembly-CSharp, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null' is not marked as serializable.
System.Runtime.Serialization.FormatterServices.InternalGetSerializableMembers (System.RuntimeType type) (at <695d1cc93cca45069c528c15c9fdd749>:0)
System.Runtime.Serialization.FormatterServices+<>c__DisplayClass9_0.<GetSerializableMembers>b__0 (System.Runtime.Serialization.MemberHolder _) (at <695d1cc93cca45069c528c15c9fdd749>:0)
System.Collections.Concurrent.ConcurrentDictionary`2[TKey,TValue].GetOrAdd (TKey key, System.Func`2[T,TResult] valueFactory) (at <695d1cc93cca45069c528c15c9fdd749>:0)
System.Runtime.Serialization.FormatterServices.GetSerializableMembers (System.Type type, System.Runtime.Serialization.StreamingContext context) (at <695d1cc93cca45069c528c15c9fdd749>:0)
System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitMemberInfo () (at <695d1cc93cca45069c528c15c9fdd749>:0)
System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.InitSerialize (System.Object obj, 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.Formatters.Binary.ObjectWriter objectWriter, System.Runtime.Serialization.SerializationBinder binder) (at <695d1cc93cca45069c528c15c9fdd749>:0)
System.Runtime.Serialization.Formatters.Binary.WriteObjectInfo.Serialize (System.Object obj, 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.Formatters.Binary.ObjectWriter objectWriter, System.Runtime.Serialization.SerializationBinder binder) (at <695d1cc93cca45069c528c15c9fdd749>: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 <695d1cc93cca45069c528c15c9fdd749>: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 <695d1cc93cca45069c528c15c9fdd749>:0)
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize (System.IO.Stream serializationStream, System.Object graph, System.Runtime.Remoting.Messaging.Header[] headers) (at <695d1cc93cca45069c528c15c9fdd749>:0)
System.Runtime.Serialization.Formatters.Binary.BinaryFormatter.Serialize (System.IO.Stream serializationStream, System.Object graph) (at <695d1cc93cca45069c528c15c9fdd749>:0)
SaveSystem.SavePlayerpaidDisplayPost2 (BuyShip2Button paidDisplayPost2) (at Assets/XXXX/SaveSystem.cs:174)
BuyShip2Button.Start () (at Assets/XXXX/BuyShip2Button.cs:51)"
Code : Tout sélectionner
public static void SavePlayerpaidDisplayPost2(BuyShip2Button paidDisplayPost2)
{
BinaryFormatter formatter5 = new BinaryFormatter();
string path5 = Application.persistentDataPath + "/paidDisplayPost2.fun";
FileStream stream5 = new FileStream(path5, FileMode.Create);
PlayerpaidDisplayPost2 datapaidDisplayPost2 = new PlayerpaidDisplayPost2(paidDisplayPost2);
Debug.Log("sauvegarde paid2");
formatter5.Serialize(stream5, paidDisplayPost2);
stream5.Close();
}
public static PlayerpaidDisplayPost2 LoadPlayerpaidDisplayPost2()
{
string path5 = Application.persistentDataPath + "/paidDisplayPost2.fun";
if (File.Exists(path5))
{
BinaryFormatter formatter5 = new BinaryFormatter();
FileStream stream5 = new FileStream(path5, FileMode.Open);
Debug.Log("load paid2");
PlayerpaidDisplayPost2 datapaidDisplayPost2 = formatter5.Deserialize(stream5) as PlayerpaidDisplayPost2;
stream5.Close();
return datapaidDisplayPost2;
}
else
{
Debug.LogError("Save file not found in" + path5);
return null;
}
}
Le script BuyShip2Button :
Code : Tout sélectionner
void Start()
{
SaveSystem.SavePlayerpaidDisplayPost2(this);
}
// Update is called once per frame
void Update()
{
LoadPlayerpaidDisplayPost2();
}
Ce qui est le plus étrange, c'est que j'utilise exactement la même méthode pour d'autres données sauvegardées et je n'ai pas ce soucis. Ca sauvegarde et pas de soucis de sézarilisation/dé-sézarilisation.
J'ai supprimé plusieurs fois le fichier dans le lequel se sauvegardait "paidDisplayPost2" en pensant que le fichier etait corrompu mais le problème persiste.
Du coup, j'ai testé en mettant la sauvegarde et le load d'une donnée (dont la sauvegarde et le load se fait juste avant celle de "paidDisplayPost2") en commentaire mais le problème persiste. Je pensais que "paidDisplayPost2" n'avait pas pleinement le temps de se sauvegarder, donc en supprimant la sauvegarde de la donnée d'avant, peut être que ... mais non. C'est une stupide idée mais je ne sais plus trop quoi faire ...
Pourriez-vous m'aider à identifier la source de mon problème ?
Bien à vous,
Bilu