CerealBox.ConvertDynamic.ToXml C# (CSharp) Method

ToXml() public static method

public static ToXml ( object>.IDictionary dictionary, string elementName ) : string
dictionary object>.IDictionary
elementName string
return string
        public static string ToXml(IDictionary<string, object> dictionary, string elementName)
        {
            string attributes = dictionary.Where(kvp => kvp.Key.EndsWith(AttributeMarker)).Aggregate<KeyValuePair<string, object>, string>(null, (current, kvp) => current + string.Format(" {0}=\"{1}\"", kvp.Key.Replace(AttributeMarker, string.Empty), kvp.Value));

            var stringBuilder = new StringBuilder("<{0}{1}>".Fmt(elementName, attributes));
            foreach (var kvp in dictionary.Where(k => !k.Key.EndsWith(AttributeMarker)))
            {
                if (kvp.Value is IDictionary<string, object>)
                    stringBuilder.Append(ToXml((IDictionary<string, object>)kvp.Value, kvp.Key));
                else if (kvp.Value is dynamic[])
                {
                    foreach (var dyn in (dynamic[])kvp.Value)
                    {
                        stringBuilder.Append(ToXml(dyn, kvp.Key));
                    }
                }
                else if (kvp.Value.GetType().IsArray || (kvp.Value.GetType().IsGenericType && kvp.Value is IEnumerable))
                {
                    foreach (var value in (IEnumerable)kvp.Value)
                    {
                        stringBuilder.Append("<{0}>{1}</{0}>".Fmt(kvp.Key, value));
                    }
                }
                else
                    stringBuilder.Append("<{0}>{1}</{0}>".Fmt(kvp.Key, kvp.Value));
            }
            stringBuilder.Append("</{0}>".Fmt(elementName));
            return stringBuilder.ToString();
        }
ConvertDynamic