public static void WriteChartElement(this IChartElement element, BindingFlags bindingFlags, XmlWriter writer) { if (element == null) { return; } var elementType = element.GetType(); if (IsDebugEnabled) { log.Debug(@"타입[{0}]에서 속성 중에 XmlElement로 빌드할 정보를 생성합니다.", elementType.FullName); } var fields = elementType.Fields().ToList(); var properties = elementType.Properties(bindingFlags).ToList(); var elements = properties.Where( pi => pi.PropertyType.IsSameOrSubclassOf(ChartElementType) || (pi.PropertyType.IsSameOrSubclassOf(typeof(IEnumerable <>)) && pi.PropertyType != typeof(string))).ToArray(); foreach (var pi in elements) { var name = pi.Name; if (IsDebugEnabled) { log.Debug(@"IChartElement 속성 [{0}]을 Xml Element로 생성합니다.", name); } var fieldName = FasterflectTool.GetMemberName(name, MemberNamingRule.CamelCaseUndercore); var fieldValueExists = fields.Any(fi => fi.Name == fieldName) && (element.TryGetFieldValue(fieldName) != null); if (fieldValueExists) { var elem = element.TryGetPropertyValue(name); if (elem != null) { if (elem is IChartElement) { ((IChartElement)elem).WriteXmlElement(writer); } else if (elem is IEnumerable) { foreach (var x in (IEnumerable)elem) { if (x != null && x is IChartElement) { ((IChartElement)x).WriteXmlElement(writer); } } } } } } }
private string determineName(IChartElement element) { if (element is IChart) { return("chart"); } if (element is IChartSet) { return("set"); } if (element is IChartTrendLine) { return("line"); } throw new Exception("unknown type " + element.GetType().Name); }
private string determineName(IChartElement element) { if (element is IChart) return "chart"; if (element is IChartSet) return "set"; if (element is IChartTrendLine) return "line"; throw new Exception("unknown type " + element.GetType().Name); }