Ejemplo n.º 1
0
        private XElement Serialize(IDataTransfer dataTransfer)
        {
            var type = dataTransfer.GetType();

            if (type.GetInterfaces().Any(t => t.IsListDataTransfer()))
            {
                return SerializeList(dataTransfer);
            }

            return new XElement("root",
                type.GetProperties()
                    .OrderBy(t => t.Name)
                    .Select(
                        p =>
                            new SerializeRecord {Type = p.PropertyType, Name = p.Name, Value = p.GetValue(dataTransfer)})
                    .Where(rec => rec.Value != null)
                    .FilteredSelect(new Dictionary<Func<SerializeRecord, bool>, Func<SerializeRecord, XElement>>()
                    {
                        [rec => Primitives.ContainsKey(rec.Type)] =
                            rec => Primitives[rec.Type].Serializer(rec.Name, rec.Value),
                        [rec => rec.Type.IsEnum] =
                            rec => new XElement(rec.Name, rec.Value.ToString()),
                        [rec => rec.Type == typeof (ImageBox)] =
                            rec => Serialize(rec.Name, (ImageBox) rec.Value),
                        [rec => rec.Value is IDataTransfer] =
                            rec => new XElement(rec.Name, Serialize((IDataTransfer) rec.Value).Elements())
                    }));
        }
Ejemplo n.º 2
0
 private XElement SerializeList(IDataTransfer dataTransfer)
 {
     var xml = new XElement("root");
     var property = dataTransfer.GetType().GetProperty("List");
     var value = property.GetValue(dataTransfer);
     foreach (IDataTransfer rec in (IEnumerable)value)
     {
         xml.Add(new XElement("Item", Serialize(rec).Elements()));
     }
     return xml;
 }