using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace CoderEngine { public class JavaCodeWrite { private string CodeStr = ""; /// /// 一个代码缩进 /// private string tabstr = " "; /// /// 逐行添加代码 /// /// /// public void CoderAddLine(string CodeLine) { CodeStr += CodeLine + "\n"; } public string ModelToJavaCode(string _AssemblyName, string _TypeName) { TypeMode tm = new _ModleReader().ModelCheck(_AssemblyName, _TypeName); ModelToJavaCodeWriter(tm); return CodeStr; } public void ModelToJavaCodeWriter(TypeMode TopMode) { //如果有代码嵌套的下级类 在本类外 写入新的类 if (TopMode.TypeList != null && TopMode.TypeList.Count > 0) { CoderAddLine(tabstr); JavaCodeDownRecursion(TopMode); } } public void JavaCodeDownRecursion(TypeMode TopMode) { string ClassName = ""; //如果自己就是集合类型 则取类型下名字 if (TopMode.MemberType.Name == "List`1") { //FullName的值为 "System.Collections.Generic.List`1[[ --集合内嵌类型名称--, CoderEngine, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]" //其中包含内嵌List的名称 我们要将其取出 得到的值例如 “程序集.*.*类型” var SonParamName = TopMode.MemberType.FullName.Substring(TopMode.MemberType.FullName.IndexOf("[") + 2); SonParamName = SonParamName.Substring(0, SonParamName.IndexOf(",")); ClassName = SonParamName.Substring(SonParamName.LastIndexOf(".")+1); } else ClassName = TopMode.MemberType.Name; CoderAddLine("public class " + ClassName + " {"); foreach (var tl in TopMode.TypeList) { CoderAddLine(""); if (tl.MemberType.Name == "List`1") { } else { CoderAddLine(tabstr + "@SerializedName(value = \"" + tl.Name + "\")"); } CoderAddLine(tabstr + "private " + CSharpToJavaTypeName(tl.MemberType) + " " + tl.Name + ";"); } CoderAddLine(""); CoderAddLine(tabstr + "//"+ ClassName + "中所有属性对应get set 方法"); foreach (var tl in TopMode.TypeList) { CoderAddLine(""); CoderAddLine(tabstr + "public " + CSharpToJavaTypeName(tl.MemberType) + " get" + tl.Name + "(){return " + tl.Name + ";}"); CoderAddLine(""); CoderAddLine(tabstr + "public void set" + tl.Name + "(" + CSharpToJavaTypeName(tl.MemberType) + " " + tl.Name + "){return this." + tl.Name + " = " + tl.Name + ";}"); } CoderAddLine(""); CoderAddLine(tabstr+"//为该实体类生成的toString打印方法"); CoderAddLine(tabstr+ "@Override"); CoderAddLine(tabstr + "public String toString() {"); CoderAddLine(tabstr + tabstr + "return \"CommentInfoModel{ \" +"); foreach (var tl in TopMode.TypeList) { CoderAddLine(tabstr + tabstr + tabstr + "\"" + tl.Name + "='\" + " + tl.Name + " + '\\'' + \",\" "); } CoderAddLine(tabstr + tabstr + tabstr + "'}';"); CoderAddLine(tabstr + "}"); CoderAddLine("}"); foreach (var tl in TopMode.TypeList) { if(tl.MemberType.Name == "List`1") { if (tl.TypeList != null && tl.TypeList.Count > 0) { CoderAddLine(""); JavaCodeDownRecursion(tl); } } } } /// /// 转换成Java代码 /// /// public string CSharpToJavaTypeName(Type myType) { var oneinfo = CSharpToJavaTypeItem.Where(w => w.Key == myType.Name).FirstOrDefault(); if (oneinfo.Value != null) { return oneinfo.Value; } else { if(myType.Name == "List`1") { var SonParamName = myType.FullName.Substring(myType.FullName.IndexOf("[") + 2); SonParamName = SonParamName.Substring(0, SonParamName.IndexOf(",")); return "List<" + SonParamName.Substring(SonParamName.LastIndexOf('.')+1) + ">"; } else if (myType.Name == "Nullable`1") { var SonParamName = myType.FullName.Substring(myType.FullName.IndexOf("[") + 2); SonParamName = SonParamName.Substring(0, SonParamName.IndexOf(",")); return SonParamName.Substring(SonParamName.LastIndexOf('.')+1); } else return "string"; } } /// /// C#和Java代码对照表 /// public System.Collections.Generic.Dictionary CSharpToJavaTypeItem = new Dictionary() { { "int","int"}, { "Int16","int"}, { "Int32","int"}, { "Int64","int"}, { "int?","int"}, { "long","long"}, { "long?","long"}, { "float","float"}, { "float?","float"}, { "double","double"}, { "double?","double"}, { "boolean","boolean"}, { "string","string"}, { "DateTime","DateTime"}, { "DateTime?","DateTime"}, }; } }