/// <summary> /// Writes the complex property (nested object). /// </summary> private static void WriteComplexProperty(object obj, XmlWriter writer, Type valueType) { var props = GetNonDefaultProperties(obj).ToList(); // Specify type for interfaces and abstract classes if (valueType.IsAbstract) { writer.WriteAttributeString(TypNameAttribute, TypeStringConverter.Convert(obj.GetType())); } // Write attributes foreach (var prop in props.Where(p => IsBasicType(p.PropertyType))) { var converter = GetConverter(prop, prop.PropertyType); var stringValue = converter.ConvertToInvariantString(prop.GetValue(obj, null)); writer.WriteAttributeString(PropertyNameToXmlName(prop.Name), stringValue ?? ""); } // Write elements foreach (var prop in props.Where(p => !IsBasicType(p.PropertyType))) { WriteElement(prop.GetValue(obj, null), writer, PropertyNameToXmlName(prop.Name), prop.PropertyType, prop); } }
/// <summary> /// Writes the complex property (nested object). /// </summary> private static void WriteComplexProperty(object obj, XmlWriter writer, Type valueType) { var props = GetNonDefaultProperties(obj).OrderBy(x => x.Name).ToList(); var realType = obj.GetType(); // Specify type when it differs from declared type. if (valueType != realType) { writer.WriteAttributeString(TypNameAttribute, TypeStringConverter.Convert(obj.GetType())); } if (IsBasicType(obj.GetType())) { WriteBasicProperty(obj, writer, realType, null); return; } // Write attributes foreach (var prop in props.Where(p => IsBasicType(p.PropertyType) && !IsObsolete(p))) { var converter = GetConverter(prop, prop.PropertyType); var stringValue = converter.ConvertToInvariantString(prop.GetValue(obj, null)); writer.WriteAttributeString(PropertyNameToXmlName(prop.Name), stringValue ?? ""); } // Write elements foreach (var prop in props.Where(p => !IsBasicType(p.PropertyType))) { WriteElement(prop.GetValue(obj, null), writer, PropertyNameToXmlName(prop.Name), prop.PropertyType, prop); } }
/// <summary> /// Writes the complex property (nested object). /// </summary> private static void WriteComplexProperty(object obj, XmlWriter writer, Type valueType) { if (obj == null) { // Happens with reference-type properties that have non-null default value. // Example: IgniteClientConfiguration.Logger writer.WriteAttributeString(TypNameAttribute, TypNameNull); return; } var props = GetNonDefaultProperties(obj).OrderBy(x => x.Name).ToList(); var realType = obj.GetType(); // Specify type when it differs from declared type. if (valueType != realType) { writer.WriteAttributeString(TypNameAttribute, TypeStringConverter.Convert(obj.GetType())); } if (IsBasicType(obj.GetType())) { WriteBasicProperty(obj, writer, realType, null); return; } // Write attributes foreach (var prop in props.Where(p => IsBasicType(p.PropertyType) && !IsIgnored(p))) { var converter = GetConverter(prop, prop.PropertyType); var stringValue = converter.ConvertToInvariantString(prop.GetValue(obj, null)); writer.WriteAttributeString(PropertyNameToXmlName(prop.Name), stringValue ?? ""); } // Write elements foreach (var prop in props.Where(p => !IsBasicType(p.PropertyType))) { WriteElement(prop.GetValue(obj, null), writer, PropertyNameToXmlName(prop.Name), prop.PropertyType, prop); } }