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; }
public void VisitReadField(string variable, string reader, bool readOnly, SerializeNode node, TextBuilder builder) { if (node == null) { return; } builder.WriteIndents(); if (node.Category == SerializeNode.NodeCategory.LOCALE) { builder.Write("{0}.Set(StringSerializer.Read({1}, null));", variable, reader); } else { if (!readOnly) { builder.Write(variable); builder.Write(" = "); } VisitDeserialization(variable, reader, node, builder); if (!readOnly && node.Category == SerializeNode.NodeCategory.CLASS) { builder.Write(" as {0}", node.TypeName); } builder.Write(";"); } builder.NextLine(); }
public void VisitPrimitiveDeserialization(string reader, SerializeNode node, TextBuilder builder) { string str; if (primitiveTypeString.TryGetValue(node.Type, out str)) { builder.Write("{0}.Read{1}()", reader, str); } }
public override void Generate(HashSet <RootType> referTypes) { base.Generate(referTypes); foreach (var subType in GetSortedNoneAbstractTypes(Type)) { if (subType == Type) { var typeNode = new TypeNode(new RootType(subType, false)); var serializeNode = new SerializeNode(subType, SerializeNode.NodeCategory.CLASS, typeNode); AddChild(serializeNode, referTypes); } else { AddChild(SerializeNode.Create(subType), referTypes); } } }
public void VisitWriteField(string variable, string writer, SerializeNode node, TextBuilder builder) { if (node == null) { return; } builder.WriteIndents(); if (node.Category == SerializeNode.NodeCategory.LOCALE) { builder.Write("StringSerializer.Write({0}, {1}.ToString());", writer, variable); } else { VisitSerialization(variable, writer, node, builder); builder.Write(";"); } builder.NextLine(); }
public void VisitDeserialization(string variable, string reader, SerializeNode node, TextBuilder builder) { switch (node.Category) { case SerializeNode.NodeCategory.PRIMITIVE: VisitPrimitiveDeserialization(reader, node, builder); break; case SerializeNode.NodeCategory.ENUM: VisitEnumDeserialization(reader, node, builder); break; case SerializeNode.NodeCategory.TIMESPAN: VisitTimeSpanDeserialization(reader, node, builder); break; case SerializeNode.NodeCategory.DATETIME: VisitDateTimeDeserialization(reader, node, builder); break; case SerializeNode.NodeCategory.COLOR: VisitColorDeserialization(reader, node, builder); break; case SerializeNode.NodeCategory.POLY_CLASS: case SerializeNode.NodeCategory.CLASS: case SerializeNode.NodeCategory.ARRAY: case SerializeNode.NodeCategory.LIST: case SerializeNode.NodeCategory.DICTIONARY: VisitClassDeserialization(variable, reader, node, builder); break; case SerializeNode.NodeCategory.STRUCT: VisitStructDeserialization(variable, reader, node, builder); break; case SerializeNode.NodeCategory.NULLABLE: VisitNullableDeserialization(variable, reader, node as NullableSerializationNode, builder); break; } }
protected virtual void VisitClassDeserialization(string variable, string reader, SerializeNode node, TextBuilder builder) { builder.Write("{0}.Read({1}, {3} as {2})", node.TypeNode.SerializerTypeName, reader, node.TypeName, variable); }
public void VisitStructDeserialization(string variable, string reader, SerializeNode node, TextBuilder builder) { builder.Write("{0}.Read({1}, {2})", node.TypeNode.SerializerTypeName, reader, variable); }
public void VisitColorDeserialization(string reader, SerializeNode node, TextBuilder builder) { builder.Write("(Kernel.Engine.Color){0}.ReadUInt32()", reader); }
public void VisitDateTimeDeserialization(string reader, SerializeNode node, TextBuilder builder) { builder.Write("TimeUtil.CTimeToUtcDate({0}.ReadInt64())", reader); }
public void VisitTimeSpanDeserialization(string reader, SerializeNode node, TextBuilder builder) { builder.Write("new SerializableTimeSpan({0}.ReadInt64() * TimeSpan.TicksPerSecond)", reader); }
public virtual void VisitFixedDeserialization(string reader, SerializeNode node, TextBuilder builder) { builder.Write("{0}.ReadFixed()", reader); }
public override void Generate(HashSet <RootType> referTypes) { base.Generate(referTypes); AddChild(Serialize = SerializeNode.Create(TypeUtil.GetHashSetValueType(Type)), referTypes); }
public NullableSerializationNode(Type type, SerializeNode subTypeNode, CustomSerialierAttribute customAttribute) : base(type, NodeCategory.NULLABLE, customAttr: customAttribute) { Serialize = subTypeNode; }
public override void Generate(HashSet <RootType> referTypes) { base.Generate(referTypes); AddChild(SerializeKey = SerializeNode.Create(TypeUtil.GetDictionaryKeyType(Type)), referTypes); AddChild(SerializeValue = SerializeNode.Create(TypeUtil.GetDictionaryValueType(Type)), referTypes); }
public void VisitEnumDeserialization(string reader, SerializeNode node, TextBuilder builder) { builder.Write("({0}){1}.ReadInt32()", node.TypeName, reader); }
public void VisitClassSerialization(string variable, string writer, SerializeNode node, TextBuilder builder) { builder.Write("{0}.Write({1}, {2})", node.TypeNode.SerializerTypeName, writer, variable); }
public override void Generate(HashSet <RootType> referTypes) { AddChild(FieldType = new TypeNode(Type, customAttribute), referTypes); AddChild(Serialize = SerializeNode.Create(field.FieldType, customAttribute), referTypes); }