-
Notifications
You must be signed in to change notification settings - Fork 13
Description
Hi, I have some problem with deserialization on ios.
System.Runtime.Serialization.SerializationException: Failed to read value for member 'Decorations' of 'Info' type.
More detailed information in inner exception. ---> System.TypeLoadException: A type load exception has occurred.
at System.Type.GetType (System.String typeName, Boolean throwOnError, Boolean ignoreCase) [0x00000] in :0
at GameDevWare.Serialization.SerializationContext.GetType (System.String name, Boolean throwOnError, Boolean ignoreCase) [0x00000] in :0
at GameDevWare.Serialization.Serializers.ObjectSerializer.DeserializeMembers (IJsonReader reader, GameDevWare.Serialization.IndexedDictionary2 container, GameDevWare.Serialization.Serializers.ObjectSerializer& serializerOverride) [0x00000] in <filename unknown>:0 at GameDevWare.Serialization.Serializers.ObjectSerializer.Deserialize (IJsonReader reader) [0x00000] in <filename unknown>:0 at GameDevWare.Serialization.JsonReaderExtentions.ReadValue (IJsonReader reader, System.Type valueType, Boolean nextToken) [0x00000] in <filename unknown>:0 at GameDevWare.Serialization.Serializers.ArraySerializer.Deserialize (IJsonReader reader) [0x00000] in <filename unknown>:0 at GameDevWare.Serialization.JsonReaderExtentions.ReadValue (IJsonReader reader, System.Type valueType, Boolean nextToken) [0x00000] in <filename unknown>:0 at GameDevWare.Serialization.Serializers.ObjectSerializer.DeserializeMembers (IJsonReader reader, GameDevWare.Serialization.IndexedDictionary2 container, GameDevWare.Serialization.Serializers.ObjectSerializer& serializerOverride) [0x00000] in :0
at GameDevWare.Serialization.Serializers.ObjectSerializer.DeserializeMembers (IJsonReader reader, GameDevWare.Serialization.IndexedDictionary`2 container, GameDevWare.Serialization.Serializers.ObjectSerializer& serializerOverride) [0x00000] in :0
at GameDevWare.Serialization.Serializers.ObjectSerializer.Deserialize (IJsonReader reader) [0x00000] in :0
at GameDevWare.Serialization.JsonReaderExtentions.ReadValue (IJsonReader reader, System.Type valueType, Boolean nextToken) [0x00000] in :0
at GameDevWare.Serialization.MsgPack.Deserialize[T] (System.IO.Stream msgPackInput, GameDevWare.Serialization.SerializationContext context) [0x00000] in :0
[Serializable]
public class Info
{
public Decoration[] Decorations;
}
[Serializable]
public class Decoration
{
public Point<byte> Position;
}
[Serializable]
public class Point<TCoord> where TCoord : struct
{
public TCoord X;
public TCoord Y;
}
For fixed it the problem I added custom serializer and registered it in Json.DefaultSerializers.
public sealed class PointByteSerializer : TypeSerializer
{
public override Type SerializedType { get { return typeof(Point<byte>); } }
public override object Deserialize(IJsonReader reader)
{
if (reader == null) throw new ArgumentNullException("reader");
if (reader.Token == JsonToken.Null)
return null;
var value = new Point<byte>();
reader.ReadObjectBegin();
while (reader.Token != JsonToken.EndOfObject)
{
var memberName = reader.ReadMember();
switch (memberName)
{
case "X": value.X = reader.ReadByte(); break;
case "Y": value.Y = reader.ReadByte(); break;
default: reader.ReadValue(typeof(object)); break;
}
}
reader.ReadObjectEnd(nextToken: false);
return value;
}
public override void Serialize(IJsonWriter writer, object value)
{
if (writer == null) throw new ArgumentNullException("writer");
if (value == null) throw new ArgumentNullException("value");
var point = (Point<byte>)value;
writer.WriteObjectBegin(2);
writer.WriteMember("X");
writer.Write(point.X);
writer.WriteMember("Y");
writer.Write(point.Y);
writer.WriteObjectEnd();
}
}
but it didn't solve. Can you help, please?