public object Deserialize(XElement root, Deserializer deserializer)
        {
            object crObject = deserializer.GetCRObject(root);

            if (crObject != null)
            {
                return(crObject);
            }

            Body    body    = (Body)deserializer.DeserializeObject(root.Element("Body"));
            Shape   shape   = (Shape)deserializer.DeserializeObject(root.Element("Shape"));
            Fixture fixture = new Fixture(body, shape);

            deserializer.DeserializeMetadata(root, fixture);
            deserializer.AddToCRList(root, fixture);

            fixture.CollisionCategories = (Category)DefaultConverters.StringToInt(root.Attribute("CategoryBits").Value);
            fixture.CollidesWith        = (Category)DefaultConverters.StringToInt(root.Attribute("MaskBits").Value);
            fixture.CollisionGroup      = (short)DefaultConverters.StringToShort(root.Attribute("GroupIndex").Value);
            fixture.Friction            = (float)DefaultConverters.StringToFloat(root.Attribute("Friction").Value);
            fixture.IsSensor            = (bool)DefaultConverters.StringToBool(root.Attribute("IsSensor").Value);
            fixture.Restitution         = (float)DefaultConverters.StringToFloat(root.Attribute("Restitution").Value);

            return(fixture);
        }