protected override void Serialize(SharpMap.Layers.Layer layer, XmlElement lyrElement) { // << Check layer on null>> if (layer == null) { lyrElement.InnerText = MapSerializerConst.NullValue; } else { //Add attr TYPE XmlAttribute typeAttribute = lyrElement.OwnerDocument.CreateAttribute("Type"); typeAttribute.Value = layer.GetType().ToString(); lyrElement.Attributes.Append(typeAttribute); switch (layer.GetType().ToString()) { case "eidss.gis.Layers.EidssSystemDbLayer": case "eidss.gis.Layers.EidssExtSystemDbLayer": EidssDbLayerSerializer.Serialize((EidssDbLayer)layer, lyrElement); break; case "eidss.gis.Layers.EidssUserDbLayer": case "eidss.gis.Layers.EidssUserBufZoneLayer": EidssUserDbLayerSerializer.Serialize((EidssUserDbLayer)layer, lyrElement); break; case "eidss.gis.Layers.EidssLabelLayer": case "eidss.gis.Layers.EidssSystemLabelLayer": case "eidss.gis.Layers.EidssExtSystemLabelLayer": EidssLabelLayerSerializer.Serialize((EidssLabelLayer)layer, lyrElement); break; case "GIS_V4.Layers.VectorLayer": VectorLayerSerializer.Serialize((VectorLayer)layer, lyrElement); break; case "GIS_V4.Layers.LabelLayer": LabelLayerSerializer.Serialize((LabelLayer)layer, lyrElement); break; case "GIS_V4.Layers.GdalRasterLayer": GdalRasterLayerSerializer.Serialize((GdalRasterLayer)layer, lyrElement); break; case "GIS_V4.Layers.LayerGroup": EidssLayerGroupSerializer.Instance.Serialize((LayerGroup)layer, lyrElement); break; case "GIS_V4.Layers.TileLayer": TileLayerSerializer.Serialize((TileLayer)layer, lyrElement); break; default: throw new NotImplementedException(); } } }
protected override SharpMap.Layers.Layer Deserialize(XmlElement layerNode) { #region << Check value on NullValue >> if (layerNode.InnerText == MapSerializerConst.NullValue) { return(null); } #endregion XmlAttribute typeAttribute = layerNode.Attributes["Type"]; if (typeAttribute == null) { throw new LayerDeserializationException("Element 'Layer' don't have attribute 'Type'!"); } switch (typeAttribute.Value) { case "eidss.gis.Layers.EidssSystemDbLayer": case "eidss.gis.Layers.EidssExtSystemDbLayer": return(EidssDbLayerSerializer.Deserialize(layerNode)); case "eidss.gis.Layers.EidssUserDbLayer": case "eidss.gis.Layers.EidssUserBufZoneLayer": return(EidssUserDbLayerSerializer.Deserialize(layerNode)); case "eidss.gis.Layers.EidssLabelLayer": case "eidss.gis.Layers.EidssSystemLabelLayer": case "eidss.gis.Layers.EidssExtSystemLabelLayer": return(EidssLabelLayerSerializer.Deserialize(layerNode)); case "GIS_V4.Layers.VectorLayer": return(VectorLayerSerializer.Deserialize(layerNode)); case "GIS_V4.Layers.LabelLayer": return(LabelLayerSerializer.Deserialize(layerNode)); case "GIS_V4.Layers.GdalRasterLayer": return(GdalRasterLayerSerializer.Deserialize(layerNode)); case "GIS_V4.Layers.LayerGroup": return(EidssLayerGroupSerializer.Instance.Deserialize(layerNode)); case "GIS_V4.Layers.TileLayer": return(TileLayerSerializer.Deserialize(layerNode)); default: throw new NotImplementedException(); } }
/// <summary> /// Deserialize LabelLayer /// </summary> /// <param name="labelLayerElement">Root element to deserialize</param> /// <returns>LabelLayer</returns> public static EidssLabelLayer Deserialize(XmlElement labelLayerElement) { EidssLabelLayer resultLabelLayer = null; LayerSerializer.LayerInfo lyrInfo; XmlNode tempNode; int tempInt; #region <<Deserialize LayerFields >> try { lyrInfo = LayerSerializer.DeserializeLayerFields(labelLayerElement); } catch (Exception ex) { throw new EidssLabelLayerDeserializationException("LabelLayer can't be deserialized: " + ex.Message, ex); } //create layer switch (labelLayerElement.Attributes["Type"].Value) { case "eidss.gis.Layers.EidssLabelLayer": resultLabelLayer = new EidssLabelLayer(lyrInfo.LayerName, lyrInfo.Guid); break; case "eidss.gis.Layers.EidssSystemLabelLayer": resultLabelLayer = new EidssSystemLabelLayer(lyrInfo.LayerName, lyrInfo.Guid); break; case "eidss.gis.Layers.EidssExtSystemLabelLayer": resultLabelLayer = new EidssExtSystemLabelLayer(lyrInfo.LayerName, lyrInfo.Guid); break; } resultLabelLayer.ControledByUser = lyrInfo.ControledByUser; resultLabelLayer.Enabled = lyrInfo.Enabled; resultLabelLayer.MaxVisible = lyrInfo.MaxVisible; resultLabelLayer.MinVisible = lyrInfo.MinVisible; //resultLabelLayer.SRID = lyrInfo.SRID; - тут бля косяк в провайдере! нет проверки! resultLabelLayer.VisibleInTOC = lyrInfo.VisibleInTOC; resultLabelLayer.Transparency = lyrInfo.Transparency; #endregion #region << Deserialize >> //DataSource - переделать try { resultLabelLayer.DataSource = EidssProviderSerializer.Instance.DeserializeFromNode(labelLayerElement, "DataSource"); } catch (Exception ex) { throw new EidssLabelLayerDeserializationException("DataSource can't be deserialized: " + ex.Message, ex); } //LabelColumn tempNode = labelLayerElement.SelectSingleNode("LabelColumn"); if (tempNode == null) { throw new EidssLabelLayerDeserializationException("'LabelLayerElement' don't have element 'LabelColumn'!"); } resultLabelLayer.LabelColumn = tempNode.InnerText; //LabelFilter tempNode = labelLayerElement.SelectSingleNode("LabelFilter"); if (tempNode == null) { throw new EidssLabelLayerDeserializationException("'LabelLayerElement' don't have element 'LabelFilter'!"); } resultLabelLayer.LabelFilter = LabelLayerSerializer.GetFilterLabelDelegate(tempNode.InnerText); //LabelStringDelegate //NotImplemented //MultipartGeometryBehaviour tempNode = labelLayerElement.SelectSingleNode("MultipartGeometryBehaviour"); if (tempNode == null) { throw new EidssLabelLayerDeserializationException("'LabelLayerElement' don't have element 'MultipartGeometryBehaviour'!"); } if (!Int32.TryParse(tempNode.InnerText, out tempInt) || !Enum.IsDefined(typeof(SharpMap.Layers.LabelLayer.MultipartGeometryBehaviourEnum), tempInt)) { throw new EidssLabelLayerDeserializationException("Can't parse node 'MultipartGeometryBehaviour'!"); } resultLabelLayer.MultipartGeometryBehaviour = (SharpMap.Layers.LabelLayer.MultipartGeometryBehaviourEnum)tempInt; //Priority tempNode = labelLayerElement.SelectSingleNode("Priority"); if (tempNode == null) { throw new EidssLabelLayerDeserializationException("'LabelLayerElement' don't have element 'Priority'!"); } if (!Int32.TryParse(tempNode.InnerText, out tempInt) || tempInt < 0) { throw new EidssLabelLayerDeserializationException("Can't parse node 'Priority'!"); } resultLabelLayer.Priority = tempInt; //RotationColumn tempNode = labelLayerElement.SelectSingleNode("RotationColumn"); if (tempNode == null) { throw new EidssLabelLayerDeserializationException("'LabelLayerElement' don't have element 'RotationColumn'!"); } resultLabelLayer.RotationColumn = tempNode.InnerText; //SmoothingMode tempNode = labelLayerElement.SelectSingleNode("SmoothingMode"); if (tempNode == null) { throw new EidssLabelLayerDeserializationException("'LabelLayerElement' don't have element 'SmoothingMode'!"); } if (!Int32.TryParse(tempNode.InnerText, out tempInt) || !Enum.IsDefined(typeof(SmoothingMode), tempInt)) { throw new EidssLabelLayerDeserializationException("Can't parse node 'SmoothingMode'!"); } resultLabelLayer.SmoothingMode = (SmoothingMode)tempInt; //SRID tempNode = labelLayerElement.SelectSingleNode("SRID"); if (tempNode == null) { throw new EidssLabelLayerDeserializationException("'LabelLayerElement' don't have element 'SRID'!"); } if (!Int32.TryParse(tempNode.InnerText, out tempInt)) { throw new EidssLabelLayerDeserializationException("Can't parse node 'SRID'!"); } resultLabelLayer.SRID = tempInt; //Style try { resultLabelLayer.Style = (LabelStyle)StyleSerializer.DeserializeFromNode(labelLayerElement, "Style"); } catch (Exception ex) { throw new EidssLabelLayerDeserializationException("Style can't be deserialized: " + ex.Message, ex); } //TextRenderingHint tempNode = labelLayerElement.SelectSingleNode("TextRenderingHint"); if (tempNode == null) { throw new EidssLabelLayerDeserializationException("'LabelLayerElement' don't have element 'TextRenderingHint'!"); } if (!Int32.TryParse(tempNode.InnerText, out tempInt) || !Enum.IsDefined(typeof(TextRenderingHint), tempInt)) { throw new EidssLabelLayerDeserializationException("Can't parse node 'TextRenderingHint'!"); } resultLabelLayer.TextRenderingHint = (TextRenderingHint)tempInt; //Theme //NotImplemented #endregion return(resultLabelLayer); }