public void TypeFromGeoJson(JProperty json) { MetaInfo = new MetaInfoCollection(); foreach (var childJ in json.Children().OfType<JObject>()) { JToken tokenS; childJ.TryGetValue("style", out tokenS); if (tokenS != null) { // First, convert the JSON to XML. var styleNode = JsonConvert.DeserializeXmlNode("{style:" + tokenS + "}"); var styleDoc = styleNode.ToXDocument(); var xElement = styleDoc.Element(XName.Get("style")); if (xElement != null) { // Convert child nodes to attributes. foreach (var el in xElement.Elements()) { xElement.Add(new XAttribute(UppercaseFirst(el.Name), (string)el)); } xElement.Elements().Remove(); // Parse the style. try { var newStyle = new PoIStyle(); newStyle.FromXml(xElement, ".", false); // Do not catch exception. Style = newStyle; } catch { // Ok, keep old style. } } } JToken tokenM; childJ.TryGetValue("propertyTypeData", out tokenM); if (tokenM != null) { var metaInfos = tokenM.Children(); foreach (var metaInfo in metaInfos) { var newMetaInfo = new MetaInfo(); newMetaInfo.FromGeoJson(metaInfo.ToString(Formatting.None), false); MetaInfo.Add(newMetaInfo); } } } }