示例#1
0
        static string Stringify(SerializedAggregate instance, string indent, bool skipFirst)
        {
            var builder = new StringBuilder();
            builder.AppendFormat("{0}{1}{2}", NameString(instance, indent, skipFirst), TypeString(instance), Environment.NewLine);
            builder.AppendLine(indent + "{");
            foreach (var key in instance.Children.Keys)
            {
                if (key is SerializedAtom)
                    builder.Append(Stringify(key as SerializedAtom, indent + "  ") + " ");
                else if (key is SerializedObject)
                {
                    builder.Append(Stringify(key as SerializedObject, indent + "  "));
                    builder.Append(indent + "    ");
                }
                else
                    builder.Append(indent + "  " + key + " ");

                builder.Append("-> ");

                if (instance.Children[key] is SerializedAtom)
                    builder.AppendLine(Stringify(instance.Children[key] as SerializedAtom, indent + "  ", true));
                else
                    builder.Append(Stringify(instance.Children[key], indent + "  ", true));
            }
            builder.AppendLine(indent + "}");

            return builder.ToString();
        }
 XElement ToXml(SerializedAggregate instance)
 {
     return(new XElement(Class,
                         ToXmlType(instance),
                         instance.Children
                         .Select(child =>
     {
         return new XElement(Member,
                             child.Key is string?new XElement(KeySimple, child.Key as string) :
                                 child.Key is SerializedObject ? new XElement(KeyComposite, ToXml(child.Key as SerializedObject))
                         : null,
                                 ToXml(child.Value));
     })
                         .ToArray()));
 }
        SerializedAggregate GetAggregate(XElement src)
        {
            var type    = FromXmlType(src);
            var members = src.Elements(Member)
                          .Select(el =>
            {
                var key = el.Elements(KeySimple).Count() == 1
                        ? (object)el.Element(KeySimple).Value
                        : (object)ToObject(el.Element(KeyComposite).Elements().First());
                var value = ToObject(el.Elements().ElementAt(1));
                return(new KeyValuePair <object, SerializedObject>(key, value));
            })
                          .ToList();

            var result = new SerializedAggregate()
            {
                //Name = name,
                Type = type
            };

            members.ForEach(member => result.Children.Add(member.Key, member.Value));
            return(result);
        }