private static void FlattenStatus(StatusData status) { if (status.Value != null) { return; } var type = status.Object.GetType(); var attr = type.GetAttribute <StatusNameAttribute>(); if (status.Statuses == null || status.Statuses.Count == 0) { if (status.Object == StatusContainer.Root) { return; } var name = attr?.Name; if (name == null) { if (type.IsGenericType) { if (type.GetInterface("IList") != null) { var innerType = type.IsArray ? type.GetElementType() : type.GenericTypeArguments[0]; name = (type.IsArray ? "Array Of ~ " : "List Of ~ ") + innerType.Namespace + "." + innerType.Name; } else { name = type.Namespace + "." + type.Name + " [" + type.GenericTypeArguments.Select(ga => ga.Namespace + "." + ga.Name).Join(", ") + "]"; } } else { name = type.Namespace + "." + type.Name; } } status.Value = new StatusItem { Name = name }; return; } var sValue = status.Statuses.Count > 1 ? status.Statuses.FirstOrDefault(s => s.Name == null) : status.Statuses[0]; if (sValue == null) { sValue = new StatusItem(); } else { status.Statuses.Remove(sValue); } if (sValue.Name == null) { var name = attr?.Name; if (name == null) { if (type.IsGenericType) { if (type.GetInterface("IList") != null) { var innerType = type.IsArray ? type.GetElementType() : type.GenericTypeArguments[0]; name = (type.IsArray ? "Array Of ~ " : "List Of ~ ") + innerType.Namespace + "." + innerType.Name; } else { name = type.Namespace + "." + type.Name + " [" + type.GenericTypeArguments.Select(ga => ga.Namespace + "." + ga.Name).Join(", ") + "]"; } } else { name = type.Namespace + "." + type.Name; } } sValue.Name = name; } sValue.Children.AddRange(status.Statuses); status.Statuses = null; status.Value = sValue; }