Ejemplo n.º 1
0
        private void BuildXmlFilter(XmlFilter filter, object obj, PropertyInfo objProp)
        {
            if (obj != null)
            {
                Type type = obj.GetType();
                if (type.IsArray && objProp != null)
                {
                    XmlArrayItemAttribute arrayItemAttr = (XmlArrayItemAttribute)Attribute.GetCustomAttribute(objProp, typeof(XmlArrayItemAttribute));
                    if (arrayItemAttr != null)
                    {
                        filter.Elements.Add(arrayItemAttr.ElementName);
                    }
                }

                foreach (PropertyInfo prop in type.GetProperties())
                {
                    if (ComparisonTypeMap.ComparisonTypes.Contains(prop.PropertyType))
                    {
                        XmlElementAttribute elemAttr = (XmlElementAttribute)Attribute.GetCustomAttribute(prop, typeof(XmlElementAttribute));
                        filter.Elements.Add(elemAttr != null ? elemAttr.ElementName : prop.Name);
                    }
                    else if (prop.PropertyType.Assembly == Assembly.GetExecutingAssembly())
                    {
                        BuildXmlFilter(filter, prop.GetValue(obj, null), prop);
                    }
                }
            }
        }
Ejemplo n.º 2
0
        public IEnumerable <String> SerializeObjectToLines(CustomizationComparison comparison, object item)
        {
            if (item != null)
            {
                using (MemoryStream stream = new MemoryStream())
                {
                    XmlWriterSettings settings = new XmlWriterSettings();
                    settings.OmitXmlDeclaration = true;
                    settings.Indent             = true;

                    XmlSerializerNamespaces ns = new XmlSerializerNamespaces();
                    ns.Add("", "");

                    XmlAttributeOverrides overrides = ComparisonTypeMap.GetComparisonTypeXmlOverrides(item.GetType());

                    XmlSerializer serializer = new XmlSerializer(item.GetType(), overrides);

                    XmlFilter filter = new XmlFilter();
                    BuildXmlFilter(filter, item, comparison.ParentProperty);

                    using (FilteringXmlWriter writer = new FilteringXmlWriter(XmlWriter.Create(stream, settings)))
                    {
                        writer.Filter = filter;
                        serializer.Serialize(writer, item, ns);
                    }
                    stream.Seek(0, SeekOrigin.Begin);

                    using (StreamReader sourceReader = new StreamReader(stream))
                    {
                        string line;

                        while ((line = sourceReader.ReadLine()) != null)
                        {
                            yield return(line);
                        }
                    }
                }
            }
        }