233
This commit is contained in:
parent
c729f2401f
commit
dd54964321
@ -26,7 +26,7 @@ namespace CoderEngine
|
||||
|
||||
public string ModelToJavaCode(string _AssemblyName, string _TypeName)
|
||||
{
|
||||
TypeMode tm = new ModleReader().ModelCheck(_AssemblyName, _TypeName);
|
||||
TypeMode tm = new _ModleReader().ModelCheck(_AssemblyName, _TypeName);
|
||||
ModelToJavaCodeWriter(tm);
|
||||
return CodeStr;
|
||||
}
|
||||
|
110
CoderEngine/CSharpCodeWrite.cs
Normal file
110
CoderEngine/CSharpCodeWrite.cs
Normal file
@ -0,0 +1,110 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace CoderEngine
|
||||
{
|
||||
public class CSharpCodeWrite
|
||||
{
|
||||
private string CodeStr = "";
|
||||
|
||||
/// <summary>
|
||||
/// 一个代码缩进
|
||||
/// </summary>
|
||||
private string tabstr = " ";
|
||||
|
||||
/// <summary>
|
||||
/// 逐行添加代码
|
||||
/// </summary>
|
||||
/// <param name="codeline"></param>
|
||||
/// <returns></returns>
|
||||
public void CoderAddLine(string CodeLine)
|
||||
{
|
||||
CodeStr += CodeLine + "\n";
|
||||
}
|
||||
|
||||
public string ModelToJavaCode(string _AssemblyName, string _TypeName)
|
||||
{
|
||||
TypeMode tm = new _ModleReader().ModelCheck(_AssemblyName, _TypeName);
|
||||
ModelToCSCodeWriter(tm);
|
||||
return CodeStr;
|
||||
}
|
||||
|
||||
public void ModelToCSCodeWriter(TypeMode TopMode)
|
||||
{
|
||||
//如果有代码嵌套的下级类 在本类外 写入新的类
|
||||
if (TopMode.TypeList != null && TopMode.TypeList.Count > 0)
|
||||
{
|
||||
CoderAddLine(tabstr);
|
||||
CSCodeDownRecursion(TopMode);
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void CSCodeDownRecursion(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(tabstr + "public " + ToTypeName(tl.MemberType) + " " + tl.Name + " { get; set; };");
|
||||
}
|
||||
|
||||
CoderAddLine("}");
|
||||
|
||||
|
||||
foreach (var tl in TopMode.TypeList)
|
||||
{
|
||||
if (tl.MemberType.Name == "List`1")
|
||||
{
|
||||
if (tl.TypeList != null && tl.TypeList.Count > 0)
|
||||
{
|
||||
CoderAddLine("");
|
||||
ModelToCSCodeWriter(tl);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// 类型处理
|
||||
/// </summary>
|
||||
/// <returns></returns>
|
||||
public string ToTypeName(Type myType)
|
||||
{
|
||||
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 "Nullable<" + SonParamName.Substring(SonParamName.LastIndexOf('.') + 1) + ">";
|
||||
}
|
||||
else
|
||||
return myType.Name;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
}
|
@ -40,9 +40,12 @@
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Compile Include="AjaxCodeWrite.cs" />
|
||||
<Compile Include="CSharpCodeWrite.cs" />
|
||||
<Compile Include="GolangCodeWrite.cs" />
|
||||
<Compile Include="JavaCodeWrite.cs" />
|
||||
<Compile Include="ModleReader.cs" />
|
||||
<Compile Include="_ModleReader.cs" />
|
||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||
<Compile Include="SwiftCodeWrite.cs" />
|
||||
</ItemGroup>
|
||||
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
|
||||
</Project>
|
11
CoderEngine/GolangCodeWrite.cs
Normal file
11
CoderEngine/GolangCodeWrite.cs
Normal file
@ -0,0 +1,11 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace CoderEngine
|
||||
{
|
||||
class GolangCodeWrite
|
||||
{
|
||||
}
|
||||
}
|
@ -26,7 +26,7 @@ namespace CoderEngine
|
||||
|
||||
public string ModelToJavaCode(string _AssemblyName, string _TypeName)
|
||||
{
|
||||
TypeMode tm = new ModleReader().ModelCheck(_AssemblyName, _TypeName);
|
||||
TypeMode tm = new _ModleReader().ModelCheck(_AssemblyName, _TypeName);
|
||||
ModelToJavaCodeWriter(tm);
|
||||
return CodeStr;
|
||||
}
|
||||
@ -102,6 +102,12 @@ namespace CoderEngine
|
||||
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";
|
||||
}
|
||||
|
11
CoderEngine/SwiftCodeWrite.cs
Normal file
11
CoderEngine/SwiftCodeWrite.cs
Normal file
@ -0,0 +1,11 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using System.Text;
|
||||
|
||||
namespace CoderEngine
|
||||
{
|
||||
class SwiftCodeWrite
|
||||
{
|
||||
}
|
||||
}
|
@ -44,7 +44,7 @@ namespace CoderEngine
|
||||
/// <summary>
|
||||
/// 模型读取
|
||||
/// </summary>
|
||||
public class ModleReader
|
||||
public class _ModleReader
|
||||
{
|
||||
|
||||
public TypeMode TopType = new TypeMode();
|
||||
@ -59,25 +59,25 @@ namespace CoderEngine
|
||||
/// <returns></returns>
|
||||
public TypeMode ModelCheck(string _AssemblyName, string _TypeName)
|
||||
{
|
||||
Console.WriteLine("");
|
||||
Console.WriteLine("====== C# 数据模型转Java实体类代码实现 ======");
|
||||
Console.WriteLine("");
|
||||
Console.WriteLine("读取程序集" + _AssemblyName + "下实体类" + _TypeName + "");
|
||||
//Console.WriteLine("");
|
||||
//Console.WriteLine("====== C# 数据模型转Java实体类代码实现 ======");
|
||||
//Console.WriteLine("");
|
||||
//Console.WriteLine("读取程序集" + _AssemblyName + "下实体类" + _TypeName + "");
|
||||
|
||||
//取得类型
|
||||
Type PerentType = Assembly.Load(_AssemblyName).GetType(_AssemblyName + "." + _TypeName);
|
||||
|
||||
if (PerentType == null)
|
||||
{
|
||||
Console.WriteLine("读取程序集或类不存在");
|
||||
//Console.WriteLine("读取程序集或类不存在");
|
||||
}
|
||||
|
||||
Console.WriteLine("已成功反射获取程序集");
|
||||
//Console.WriteLine("已成功反射获取程序集");
|
||||
|
||||
TopType.MemberType = PerentType;
|
||||
Console.WriteLine("对象类型:"+ TopType.MemberType);
|
||||
//Console.WriteLine("对象类型:"+ TopType.MemberType);
|
||||
TopType.Name = PerentType.Name;
|
||||
Console.WriteLine("对象名称:" + TopType.Name);
|
||||
//Console.WriteLine("对象名称:" + TopType.Name);
|
||||
//获取下级属性
|
||||
TopType.TypeList = ReadModel(PerentType);
|
||||
//}
|
||||
@ -91,19 +91,19 @@ namespace CoderEngine
|
||||
/// <param name="MethodItem"></param>
|
||||
public List<TypeMode> ReadModel(Type PerentType)
|
||||
{
|
||||
Console.WriteLine("对" + TopType.Name + "进行详细处理");
|
||||
//Console.WriteLine("对" + TopType.Name + "进行详细处理");
|
||||
//获取属性
|
||||
PropertyInfo[] Plist = PerentType.GetProperties();
|
||||
|
||||
List<TypeMode> TypeList = new List<TypeMode>();
|
||||
Console.WriteLine("遍历"+ TopType.Name + "属性: 属性数量为"+ Plist.Count());
|
||||
//Console.WriteLine("遍历"+ TopType.Name + "属性: 属性数量为"+ Plist.Count());
|
||||
foreach (var m in Plist)
|
||||
{
|
||||
TypeMode TM = new TypeMode();
|
||||
TM.Name = m.Name;
|
||||
Console.WriteLine("----" + TopType.Name + "下属性名:" + TM.Name);
|
||||
//Console.WriteLine("----" + TopType.Name + "下属性名:" + TM.Name);
|
||||
TM.MemberType = m.PropertyType;
|
||||
Console.WriteLine("----" + TopType.Name + "下属性" + TM.Name + " 类型为" + TM.MemberType.Name + "完整类型名" + TM.MemberType.Name);
|
||||
//Console.WriteLine("----" + TopType.Name + "下属性" + TM.Name + " 类型为" + TM.MemberType.Name + "完整类型名" + TM.MemberType.Name);
|
||||
//如果是List<T>类型 则往下解析
|
||||
if (TM.MemberType.Name == "List`1")
|
||||
{
|
||||
@ -125,7 +125,7 @@ namespace CoderEngine
|
||||
TM.DownParamType = SonType;
|
||||
TM.DownParamName = SonType.Name;
|
||||
|
||||
Console.WriteLine("----对" + TopType.Name + "下属性" + TM.Name + " 嵌套泛型进行处理");
|
||||
//Console.WriteLine("----对" + TopType.Name + "下属性" + TM.Name + " 嵌套泛型进行处理");
|
||||
TM.TypeList = ReadModel(SonType);
|
||||
|
||||
|
@ -13,6 +13,7 @@ namespace UseEngineConsolo
|
||||
{
|
||||
public int a { get; set; }
|
||||
public int aa { get; set; }
|
||||
public DateTime? date { get; set; }
|
||||
public List<B> Blist { get; set; }
|
||||
}
|
||||
|
||||
@ -40,12 +41,17 @@ namespace UseEngineConsolo
|
||||
Console.WriteLine();
|
||||
|
||||
string JavaCode = new JavaCodeWrite().ModelToJavaCode("UseEngineConsolo", "A");
|
||||
|
||||
Console.WriteLine();
|
||||
Console.WriteLine("C#实体类动态转Java代码结果:");
|
||||
Console.WriteLine();
|
||||
|
||||
Console.WriteLine(JavaCode);
|
||||
Console.WriteLine();
|
||||
Console.WriteLine();
|
||||
string CSCode = new CSharpCodeWrite().ModelToJavaCode("UseEngineConsolo", "A");
|
||||
Console.WriteLine();
|
||||
Console.WriteLine("C#实体类动态转C#客户端代码结果:");
|
||||
Console.WriteLine();
|
||||
Console.WriteLine(CSCode);
|
||||
Console.ReadLine();
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user