public string GenerateMd5(SerializationGenerator generator) { List <byte> codeMd5 = new List <byte>(); foreach (var node in generator.RegisteredTypes) { if (node.CodeMd5 != null) { codeMd5.AddRange(node.CodeMd5); } } return(MD5Util.Md5ToString(MD5Util.MD5(codeMd5.ToArray()))); }
public void Export(SerializationGenerator generator, string nameSpace, string targetFolder) { foreach (var pair in generator.RegisteredTypes) { if (pair.IsEnum) { continue; } var builder = new TextBuilder(); VisitRoot(pair, nameSpace, builder); pair.CodeMd5 = MD5Util.MD5(builder.ToString()); builder.WriteToFile(Path.Combine(targetFolder, pair.FileName + ".cs")); } }
public void Export(SerializationGenerator generator, string nameSpace, string md5, string targetFolder) { var builder = new TextBuilder(); builder.WriteLine("using System;"); builder.WriteLine("using System.Collections.Generic;"); builder.WriteLine("using System.IO;"); builder.WriteLine("using Kernel;"); builder.WriteLine("using Kernel.Config;"); builder.EmptyLine(); builder.WriteLine("namespace {0}", nameSpace); builder.LeftPar(); builder.Indent(); builder.WriteLine("public partial class ConfigSerializer : ConfigSerializerBase"); builder.LeftPar(); builder.Indent(); builder.WriteLine("private static readonly ConfigFieldInfo[] fields ="); builder.WriteLine("{"); builder.Indent(); foreach (var pair in generator.RegisteredTypes) { if (pair.IsEntry && !pair.Root.PoliClass) { VisitEntry(pair, builder); } } builder.UnIndent(); builder.WriteLine("};"); builder.EmptyLine(); builder.WriteLine("public override ConfigFieldInfo[] Fields { get { return fields; } }"); builder.EmptyLine(); builder.WriteLine("public override string Hash {{ get {{ return \"{0}\"; }} }}", md5); builder.EmptyLine(); builder.WriteLine("private static readonly Dictionary<Type, IConfigSerializer> serializers = new Dictionary<Type, IConfigSerializer>"); builder.WriteLine("{"); builder.Indent(); foreach (var pair in generator.RegisteredTypes) { if ((pair.Root.PoliClass || !XmlUtil.IsPolymorphicClass(pair.Type)) && !pair.IsEnum) { VisitSerializer(pair, builder); } } builder.UnIndent(); builder.WriteLine("};"); builder.EmptyLine(); builder.WriteLine("public override Dictionary<Type, IConfigSerializer> Serializers { get { return serializers; } }"); builder.UnIndent(); builder.RightPar(); builder.UnIndent(); builder.RightPar(); builder.WriteToFile(Path.Combine(targetFolder, "ConfigSerializer.cs")); }