/// <summary> /// Loads from XML node. /// </summary> /// <param name="node">The node.</param> /// <returns>The PList data constructed from the xml node.</returns> public static IPListElement LoadFromXmlNode(XmlNode node) { switch (node.Name.ToLower()) { case "string": return(new PListString(node.InnerText)); case "real": return(new PListReal(decimal.Parse(node.InnerText))); case "integer": return(new PListInteger(int.Parse(node.InnerText))); case "true": return(new PListBoolean(true)); case "false": return(new PListBoolean(false)); case "date": return(new PListDate(DateTime.Parse(node.InnerText))); case "data": return(new PListData(Convert.FromBase64String(node.InnerText))); case "array": { var array = new PListArray(); foreach (XmlNode child in node.ChildNodes) { array.Add(LoadFromXmlNode(child)); } return(array); } case "dict": { var dict = new PListDictionary(); for (int i = 0; i < node.ChildNodes.Count; i += 2) { var keyNode = node.ChildNodes[i]; var key = keyNode.InnerText; dict.Add(key, LoadFromXmlNode(node.ChildNodes[i + 1])); } return(dict); } default: return(null); } }
/// <summary> /// Determines whether the specified <see cref="System.Object" />, is equal to this instance. /// </summary> /// <param name="obj">The <see cref="System.Object" /> to compare with this instance.</param> /// <returns> /// <c>true</c> if the specified <see cref="System.Object" /> is equal to this instance; otherwise, <c>false</c>. /// </returns> public override bool Equals(object obj) { PListArray other = obj as PListArray; if (other == null) { return(false); } return(Enumerable.SequenceEqual(this, other)); }