Skip to content

Failed to read value for member. #13

@Janry

Description

@Janry

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?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions