Exemple #1
0
 protected void AppendReadPart(ReadPartNode node, TextBuilder builder)
 {
     if (node.FirstChild is ArrayTypeNode)
     {
         VisitReadArray(VARIABLE, STREAM, node.FirstChild as ArrayTypeNode, builder);
     }
     else if (node.FirstChild is ListTypeNode)
     {
         VisitReadList(VARIABLE, STREAM, node.FirstChild as ListTypeNode, builder);
     }
     else if (node.FirstChild is DictionaryTypeNode)
     {
         VisitReadDictionary(VARIABLE, STREAM, node.FirstChild as DictionaryTypeNode, builder);
     }
     else if (node.FirstChild is HashSetTypeNode)
     {
         VisitReadHashSet(VARIABLE, STREAM, node.FirstChild as HashSetTypeNode, builder);
     }
     else if (node.FirstChild is PolyClassTypeNode)
     {
         VisitReadPolyClass(VARIABLE, STREAM, node.FirstChild as PolyClassTypeNode, builder);
     }
     else if (node.FirstChild is TwoDimArrayTypeNode)
     {
         VisitReadTwoDimArray(VARIABLE, STREAM, node.FirstChild as TwoDimArrayTypeNode, builder);
     }
     else if (node.FirstChild is StringTypeNode)
     {
         VisitReadString(VARIABLE, STREAM, builder);
     }
     else
     {
         AppendReadAllFields(node, builder);
     }
 }
Exemple #2
0
        public override void Generate(HashSet <RootType> referTypes)
        {
            if (Type.IsEnum)
            {
                GenerateEnum(referTypes);
                return;
            }

            AddChild(Header = new TypeNode(Root), referTypes);

            List <FieldInfo> fields;
            var customInterface = Type.GetInterfaces().FirstOrDefault(t => t.Name.StartsWith("ICustomSerialization"));

            if (customInterface != null)
            {
                var arguments = customInterface.GetGenericArguments();
                CustomSerializeParams = new SerializeNode[arguments.Length];
                for (int i = 0; i < arguments.Length; i++)
                {
                    AddChild(CustomSerializeParams[i] = SerializeNode.Create(arguments[i]), referTypes);
                }
                fields = new List <FieldInfo>();
            }
            else
            {
                fields = GetSerializeFields(Type);
            }

            AddChild(ReadPart  = new ReadPartNode(Root, fields), referTypes);
            AddChild(WritePart = new WritePartNode(Root, fields), referTypes);

            FileName = Header.SerializerTypeName;
        }
Exemple #3
0
        protected virtual void AppendReadAllFields(ReadPartNode node, TextBuilder builder)
        {
            if (node.CreateNew)
            {
                builder.WriteLine("if(d == null) d = new {0}();", node.TypeName);
            }

            foreach (var child in node.Children)
            {
                if (child is FieldNode)
                {
                    var field = child as FieldNode;
                    builder.Push();
                    VisitField("d", field, builder);
                    var variable = builder.Pop();

                    VisitReadField(variable, "o", field.ReadOnly, field.Serialize, builder);
                }
            }
        }
Exemple #4
0
        protected virtual void VisitReadPart(ReadPartNode node, TextBuilder builder)
        {
            builder.WriteLine("object IConfigSerializer.Read(IBinaryReader reader, object o)");
            builder.LeftPar();
            builder.Indent();
            builder.WriteLine("return Read(reader, ({0})o);", node.TypeName);
            builder.UnIndent();
            builder.RightPar();

            builder.EmptyLine();

            builder.WriteLine("public static {0} Read(IBinaryReader o, {0} d)", node.TypeName);
            builder.LeftPar();
            builder.Indent();

            if (!node.Type.IsValueType)
            {
                builder.WriteLine("if(o.ReadBoolean() == false) return null;");
                builder.EmptyLine();
            }

            var root = node.Parent as RootNode;

            if (root != null && root.CustomSerializeParams != null)
            {
                AppendReadFromCustom("o", root.CustomSerializeParams, builder);
            }
            else
            {
                AppendReadPart(node, builder);
            }

            builder.WriteLine("return d;");

            builder.UnIndent();
            builder.RightPar();
        }