private static void compose(object value, XmlWriter writer) { if (value == null || value is string) { writer.WriteElementString("string", value as string); return; } if (value is int || value is long) { int num = (int)value; writer.WriteElementString("integer", num.ToString(NumberFormatInfo.InvariantInfo)); return; } if (value is Dictionary <string, object> || value.GetType().ToString().StartsWith("System.Collections.Generic.Dictionary`2[System.String")) { Dictionary <string, object> strs = value as Dictionary <string, object>; if (strs == null) { strs = new Dictionary <string, object>(); IDictionary dictionaries = (IDictionary)value; foreach (object key in dictionaries.Keys) { strs.Add(key.ToString(), dictionaries[key]); } } Plist.writeDictionaryValues(strs, writer); return; } if (value is List <object> ) { Plist.composeArray((List <object>)value, writer); return; } if (value is byte[]) { writer.WriteElementString("data", Convert.ToBase64String((byte[])value)); return; } if (value is float || value is double) { double num1 = (double)value; writer.WriteElementString("real", num1.ToString(NumberFormatInfo.InvariantInfo)); return; } if (value is DateTime) { writer.WriteElementString("date", XmlConvert.ToString((DateTime)value, XmlDateTimeSerializationMode.Utc)); return; } if (!(value is bool)) { throw new Exception(string.Format("Value type '{0}' is unhandled", value.GetType().ToString())); } writer.WriteElementString(value.ToString().ToLower(), ""); }