public IEnumerable<JObject> ReadElement(IAixmConverter converter, JObject currentObject, XElement element)
        {
            currentObject.AddToProperties("elevation", JObject.FromObject(element));

            //If not a feature return null;
            return Enumerable.Empty<JObject>();
        }
        public IEnumerable<JObject> ReadExtentElement(IAixmConverter converter, JObject currentObject, XElement element)
        {
         
            currentObject.AddToProperties("geometrySource", "extent");
            //set the ElementType of the extent on feature property extentSource, to be used when writing back.
            currentObject.AddToProperties("extentSource", element.Elements().First().Name.LocalName);

            return converter.ReadElement(currentObject, element.Elements());           
        }
        public IEnumerable<JObject> ReadSequenceNumberElement(IAixmConverter converter, JObject currentObject, XElement element)
        {
            int v;
            currentObject.AddToProperties("sequenceNumber", int.TryParse(element.Value, out v) ? (JToken)v:(JToken)element.Value);

            return Enumerable.Empty<JObject>();
        }
 public IEnumerable<JObject> ReadElement(IAixmConverter converter, JObject currentObject, XElement element)
 {
     var AixmElement = element.Elements().First();
     var feature = new JObject(new JProperty("type","Feature"));
     feature.AddToProperties("AixmType", AixmElement.Name.LocalName.ToString());
     return converter.ReadElement(feature, AixmElement.Elements());
 }
        public IEnumerable<JObject> ReadElement(IAixmConverter converter, JObject currentObject, XElement element)
        {
            var AixmTimeSlice = element.Elements().First();

          
            currentObject.AddToProperties("AixmTimeSlice", JToken.FromObject(AixmTimeSlice.Attributes().ToDictionary(a=>a.Name,a=>a.Value)));

            return converter.ReadElement(currentObject, AixmTimeSlice.Elements());
        }
        public IEnumerable<JObject> ReadElement(IAixmConverter converter, JObject currentObject, XElement element)
        {
            currentObject.AddToProperties("#type",element.Name.ToString());

            currentObject.Add("type", "FeatureCollection");
            currentObject.Add("features", converter.ReadElements(currentObject,element.Elements()));

           yield return currentObject;
        }
        public IEnumerable<JObject> ReadSurfacePropertiesElement(IAixmConverter converter, JObject currentObject, XElement element)
        {
            currentObject.AddToProperties("surfaceProperties", JObject.FromObject(element));

            return Enumerable.Empty<JObject>();
        }
        public IEnumerable<JObject> ReadTypeElement(IAixmConverter converter, JObject currentObject, XElement element)
        {
            currentObject.AddToProperties("aixmType", element.Value);

            return Enumerable.Empty<JObject>();
        }
        public IEnumerable<JObject> ReadInterpretationElement(IAixmConverter converter, JObject currentObject, XElement element)
        {
            currentObject.AddToProperties("interpretation", element.Value);

            return Enumerable.Empty<JObject>();
        }
        public IEnumerable<JObject> ReadLowerLimitElement(IAixmConverter converter, JObject currentObject, XElement element)
        {
            currentObject.AddToProperties("lowerLimit", JObject.FromObject(element));

            return Enumerable.Empty<JObject>();
        }
        public IEnumerable<JObject> ReadAvailabilityElement(IAixmConverter converter, JObject currentObject, XElement element)
        {
            currentObject.AddToProperties("availability", JObject.FromObject(element));

            return Enumerable.Empty<JObject>();
        }
        public IEnumerable<JObject> ReadTimeSliceMetadataElement(IAixmConverter converter, JObject currentObject, XElement element)
        {
            currentObject.AddToProperties("timeSliceMetadata", JObject.FromObject(element));

            return Enumerable.Empty<JObject>();
        }
        public IEnumerable<JObject> ReadCorrectionNumberElement(IAixmConverter converter, JObject currentObject, XElement element)
        {
            currentObject.AddToProperties("correctionNumber", JObject.FromObject(element));

            return Enumerable.Empty<JObject>();
        }
        public IEnumerable<JObject> ReadAssociatedApronElement(IAixmConverter converter, JObject currentObject, XElement element)
        {
    
            currentObject.AddToProperties("associatedApron", JToken.FromObject(element.Attributes().ToDictionary(a => a.Name, a => a.Value)));

            return Enumerable.Empty<JObject>();
        }
        public IEnumerable<JObject> ReadGeometryComponenentElement(IAixmConverter converter, JObject currentObject, XElement element)
        {
            currentObject.AddToProperties("geometrySource", element.Elements().First().Name.LocalName);

            return converter.ReadElement(currentObject, element.Elements());
          //  currentObject.Add("geometry", JObject.FromObject(element));
          

            return Enumerable.Empty<JObject>();
        }