/// <summary> /// To the JToken. /// </summary> /// <param name="xml">The XML.</param> /// <returns>JToken.</returns> internal static JToken InternalToJToken(this XElement xml) { JToken result = null; JTokenType tokenType; if (Enum.TryParse<JTokenType>(xml.GetAttributeValue(attributeType), out tokenType)) { if (xml != null) { switch (tokenType) { case JTokenType.Array: var array = new JArray(); foreach (var one in xml.Elements()) { array.AddIfNotNull(InternalToJToken(one)); } result = array; break; //Simple types case JTokenType.Date: result = JToken.FromObject(Convert.ToDateTime(xml.Value)); break; case JTokenType.Integer: case JTokenType.Float: result = JToken.Parse(xml.Value); break; case JTokenType.Boolean: result = JToken.FromObject(xml.Value.ToBoolean(false)); break; //Complex types case JTokenType.Object: var jObject = new JObject(); foreach (var one in xml.Elements()) { // Keep compatibility for those which not use nodeNamePrefix. var name = one.Name.LocalName.StartsWith(nodeNamePrefix) ? one.Name.LocalName.Substring(nodeNamePrefix.Length) : one.Name.LocalName; jObject.Add(name, InternalToJToken(one)); } result = jObject; break; case JTokenType.Property: case JTokenType.Raw: break; case JTokenType.TimeSpan: result = JToken.FromObject(new TimeSpan(xml.Value.ToInt64())); break; case JTokenType.String: result = JToken.FromObject(xml.Value); break; case JTokenType.Uri: result = JToken.FromObject(new Uri(xml.Value)); break; case JTokenType.Bytes: result = JToken.FromObject(Encoding.UTF8.GetBytes(xml.Value)); break; case JTokenType.Null: result = NullJToken; break; case JTokenType.Undefined: result = UndefinedJToken; break; //Following option should be ignored. case JTokenType.Comment: case JTokenType.Constructor: case JTokenType.None: default: break; } } } return result; }
/// <summary> /// Internals the dexmlize. /// </summary> /// <param name="xml">The XML.</param> /// <returns></returns> private static JToken InternalDexmlize(this XElement xml) { JToken result = null; JTokenType tokenType; if (Enum.TryParse<JTokenType>(xml.GetAttributeValue(attributeType), out tokenType)) { if (xml != null) { switch (tokenType) { case JTokenType.Array: var array = new JArray(); foreach (var one in xml.Elements()) { array.AddIfNotNull(InternalDexmlize(one)); } result = array; break; //Simple types case JTokenType.Date: result = JToken.FromObject(Convert.ToDateTime(xml.Value)); break; case JTokenType.Integer: case JTokenType.Float: result = JToken.Parse(xml.Value); break; case JTokenType.Boolean: result = JToken.FromObject(xml.Value.ToBoolean(false)); break; //Complex types case JTokenType.Object: var jObject = new JObject(); foreach (var one in xml.Elements()) { if (one.Name.LocalName.Equals(nodeProperty, StringComparison.OrdinalIgnoreCase)) { var name = one.GetAttributeValue(attributeName); if (!string.IsNullOrWhiteSpace(name)) { jObject.Add(name, InternalDexmlize(one)); } } } result = jObject; break; case JTokenType.Property: case JTokenType.Raw: break; case JTokenType.TimeSpan: result = JToken.FromObject(new TimeSpan(xml.Value.ToInt64())); break; case JTokenType.String: result = JToken.FromObject(xml.Value); break; case JTokenType.Uri: result = JToken.FromObject(new Uri(xml.Value)); break; case JTokenType.Bytes: result = JToken.FromObject(Encoding.UTF8.GetBytes(xml.Value)); break; case JTokenType.Null: result = NullJToken; break; case JTokenType.Undefined: result = UndefinedJToken; break; //Following option should be ignored. case JTokenType.Comment: case JTokenType.Constructor: case JTokenType.None: default: break; } } } return result; }