SerializationException: Error trying to link a previously seen object

I’m getting some serialization issues everytime I load my saved data. The error is:

Serialization error: System.Runtime.Serialization.SerializationException: Error when trying to link to a previously seen object. The stream gave an object id of 44 but that was not found. It is possible that anerror has caused the data stream to become corrupt and that this id is wildly out of range. Ids should be sequential numbers starting at 1 for the first object or value seen and then incrementing thereafter.
at Serialization.UnitySerializer.DeserializeObject (Serialization.Entry entry, IStorage storage) [0x000e7] in /Users/frarees/Documents/xmap-client/Assets/Plugins/whydoidoit.com/Serialization/UnitySerializer.cs:2328
at Serialization.UnitySerializer.DeserializeFields (IStorage storage, System.Type itemType, System.Object o) [0x0004a] in /Users/frarees/Documents/xmap-client/Assets/Plugins/whydoidoit.com/Serialization/UnitySerializer.cs:2923
at Serialization.UnitySerializer.DeserializeObjectAndProperties (System.Object o, System.Type itemType, IStorage storage) [0x00021] in /Users/frarees/Documents/xmap-client/Assets/Plugins/whydoidoit.com/Serialization/UnitySerializer.cs:2799
at Serialization.UnitySerializer.DeserializeObject (Serialization.Entry entry, IStorage storage) [0x0042b] in /Users/frarees/Documents/xmap-client/Assets/Plugins/whydoidoit.com/Serialization/UnitySerializer.cs:2456
at Serialization.UnitySerializer.JSONDeserialize (System.IO.Stream inputStream, System.Object instance) [0x00038] in /Users/frarees/Documents/xmap-client/Assets/Plugins/whydoidoit.com/Serialization/UnitySerializer.cs:1160
UnityEngine.Debug:LogError(Object)
Radical:LogError(String, Object) (at Assets/Plugins/whydoidoit.com/Radical/System/Radical.cs:940)
Radical:LogError(String) (at Assets/Plugins/whydoidoit.com/Radical/System/Radical.cs:929)
Serialization.UnitySerializer:JSONDeserialize(Stream, Object) (at Assets/Plugins/whydoidoit.com/Serialization/UnitySerializer.cs:1170)
Serialization.UnitySerializer:JSONDeserializeInto(String, Object) (at Assets/Plugins/whydoidoit.com/Serialization/UnitySerializer.cs:1354)
c__Iterator3:MoveNext() (at Assets/Plugins/whydoidoit.com/Serialization/JSONLevelLoader.cs:481)

I think it could be caused by my custom serializer:

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using Serialization;

[ComponentSerializerFor (typeof (MovableObject))]
public class MovableSerializer : IComponentSerializer {

	class MovableData {
		public string movableData;
		public string rotableData;
	}

	public byte[] Serialize (Component component) {
		MovableObject movable = component as MovableObject;
		return UnitySerializer.Serialize (new MovableData () { movableData = UnitySerializer.JSONSerializeForDeserializeInto (movable), rotableData = UnitySerializer.JSONSerializeForDeserializeInto (movable.rotable) });
	}

	public void Deserialize (byte[] data, Component instance) {
		MovableObject movable = instance as MovableObject;
		MovableData d = UnitySerializer.Deserialize<MovableData>(data);

		UnitySerializer.JSONDeserializeInto (d.movableData, movable);
		if (movable.rotable)
			UnitySerializer.JSONDeserializeInto (d.rotableData, movable.rotable);
	}

}

What it does is save data from a reference. Any clue why I get this exception?

Managed to find a solution. Thanks @whydoidoit.

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using Serialization;

[ComponentSerializerFor (typeof (MovableObject))]
public class MovableSerializer : IComponentSerializer {

	class MovableData {
		public string movableData;
		public string rotableData;
	}

	public byte[] Serialize (Component component) {
		using (new UnitySerializer.SerializationSplitScope ()) {
			MovableObject movable = component as MovableObject;
			return UnitySerializer.Serialize (new MovableData () { movableData = UnitySerializer.JSONSerializeForDeserializeInto (movable), rotableData = UnitySerializer.JSONSerializeForDeserializeInto (movable.rotable) });
		}
	}

	public void Deserialize (byte[] data, Component instance) {
		using (new UnitySerializer.SerializationSplitScope ()) {
			MovableObject movable = instance as MovableObject;
			MovableData d = UnitySerializer.Deserialize<MovableData> (data);

			UnitySerializer.JSONDeserializeInto (d.movableData, movable);
			if (movable.rotable)
				UnitySerializer.JSONDeserializeInto (d.rotableData, movable.rotable);
		}
	}

}