更改表结构,以减少二次映射
This commit is contained in:
@@ -7,16 +7,6 @@ namespace ExcelTool.Parser
|
|||||||
{
|
{
|
||||||
public static class GenModels
|
public static class GenModels
|
||||||
{
|
{
|
||||||
// ── 枚举类型映射(key: 小写类型名,value: C# 枚举类型名)──────────────
|
|
||||||
// 新增枚举类型只改这里
|
|
||||||
private static readonly Dictionary<string, string> EnumMap = new()
|
|
||||||
{
|
|
||||||
{ "killmode", "KillMode" },
|
|
||||||
{ "mixingtype", "MixingType" },
|
|
||||||
{ "containertype", "ContainerType" },
|
|
||||||
{ "blendcrossfadetype","BlendCrossFadeType" },
|
|
||||||
};
|
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// 生成对应的 C# Model 类
|
/// 生成对应的 C# Model 类
|
||||||
/// </summary>
|
/// </summary>
|
||||||
@@ -37,7 +27,7 @@ namespace ExcelTool.Parser
|
|||||||
for (int sheetNum = 0; ; sheetNum++)
|
for (int sheetNum = 0; ; sheetNum++)
|
||||||
{
|
{
|
||||||
var headers = ExcelHelper.ExcelHeaders(fileName, out string sheetName, out int sheetCount, sheetNum);
|
var headers = ExcelHelper.ExcelHeaders(fileName, out string sheetName, out int sheetCount, sheetNum);
|
||||||
if (headers == null || headers.Count == 0 || sheetName.StartsWith('#') || sheetNum > sheetCount)
|
if (headers == null || headers.Count == 0 || sheetName.StartsWith("#") || sheetNum > sheetCount)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
var sb = new StringBuilder();
|
var sb = new StringBuilder();
|
||||||
@@ -109,13 +99,6 @@ namespace ExcelTool.Parser
|
|||||||
var type = header.FieldType.ToLower();
|
var type = header.FieldType.ToLower();
|
||||||
var name = header.FieldName;
|
var name = header.FieldName;
|
||||||
|
|
||||||
// 枚举
|
|
||||||
if (EnumMap.TryGetValue(type, out var enumCsType))
|
|
||||||
{
|
|
||||||
sb.Append($"\t\t{name} = ({enumCsType})reader.ReadByte();\n");
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 注册表中的具名类型
|
// 注册表中的具名类型
|
||||||
var desc = TypeRegistry.Get(type);
|
var desc = TypeRegistry.Get(type);
|
||||||
if (desc != null)
|
if (desc != null)
|
||||||
@@ -133,13 +116,12 @@ namespace ExcelTool.Parser
|
|||||||
$"list<T> 的元素类型 \"{elemType}\" 未注册 ({sheetName})".WriteErrorLine();
|
$"list<T> 的元素类型 \"{elemType}\" 未注册 ({sheetName})".WriteErrorLine();
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
// 读取表达式复用注册表中的 GenDeserialize 只取 ReadXxx() 部分比较麻烦,
|
|
||||||
// 这里直接用公共辅助方法生成片段
|
|
||||||
sb.Append(TypeRegistry.GenListDeserialize(name, elemDesc.CSharpType, GetReadExpr(elemDesc)));
|
sb.Append(TypeRegistry.GenListDeserialize(name, elemDesc.CSharpType, GetReadExpr(elemDesc)));
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
$"类型 \"{type}\" 未注册,{sheetName} 处理异常".WriteErrorLine();
|
// 兜底:当枚举处理,类型名直接用 FieldType 原值(保留大小写)
|
||||||
|
sb.Append($"\t\t{name} = ({header.FieldType})reader.ReadByte();\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
sb.Append("\t}\n");
|
sb.Append("\t}\n");
|
||||||
@@ -158,13 +140,6 @@ namespace ExcelTool.Parser
|
|||||||
var type = header.FieldType.ToLower();
|
var type = header.FieldType.ToLower();
|
||||||
var name = header.FieldName;
|
var name = header.FieldName;
|
||||||
|
|
||||||
// 枚举
|
|
||||||
if (EnumMap.ContainsKey(type))
|
|
||||||
{
|
|
||||||
sb.Append($"\t\twriter.Write((byte){name});\n");
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
// 注册表
|
// 注册表
|
||||||
var desc = TypeRegistry.Get(type);
|
var desc = TypeRegistry.Get(type);
|
||||||
if (desc != null)
|
if (desc != null)
|
||||||
@@ -180,7 +155,8 @@ namespace ExcelTool.Parser
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
$"类型 \"{type}\" 未注册,{sheetName} 处理异常".WriteErrorLine();
|
// 兜底:当枚举处理
|
||||||
|
sb.Append($"\t\twriter.Write((byte){name});\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
sb.Append("\t}\n");
|
sb.Append("\t}\n");
|
||||||
@@ -230,9 +206,6 @@ namespace ExcelTool.Parser
|
|||||||
{
|
{
|
||||||
var lower = fieldType.ToLower();
|
var lower = fieldType.ToLower();
|
||||||
|
|
||||||
if (EnumMap.TryGetValue(lower, out var enumType))
|
|
||||||
return enumType;
|
|
||||||
|
|
||||||
var desc = TypeRegistry.Get(lower);
|
var desc = TypeRegistry.Get(lower);
|
||||||
if (desc != null)
|
if (desc != null)
|
||||||
return desc.CSharpType;
|
return desc.CSharpType;
|
||||||
@@ -244,8 +217,8 @@ namespace ExcelTool.Parser
|
|||||||
return elemDesc != null ? $"List<{elemDesc.CSharpType}>" : $"List<{elemType}>";
|
return elemDesc != null ? $"List<{elemDesc.CSharpType}>" : $"List<{elemType}>";
|
||||||
}
|
}
|
||||||
|
|
||||||
// 兜底:直接用原始类型名(可能是用户自定义类型)
|
// 兜底:当枚举处理,保留原始类型名大小写
|
||||||
return fieldType.ToLower();
|
return fieldType;
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>尝试解析 list<T> 语法,成功返回元素类型名</summary>
|
/// <summary>尝试解析 list<T> 语法,成功返回元素类型名</summary>
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
|
|
||||||
@@ -10,13 +10,6 @@ namespace ExcelTool.Parser
|
|||||||
{
|
{
|
||||||
try
|
try
|
||||||
{
|
{
|
||||||
Dictionary<string, string> enumMap = new()
|
|
||||||
{
|
|
||||||
{ "killmode", "byte" },
|
|
||||||
{ "mixingtype", "byte" },
|
|
||||||
{ "containertype", "byte" },
|
|
||||||
{ "blendcrossfadetype", "byte" }
|
|
||||||
};
|
|
||||||
FileInfo fileInfo = new(fileName);
|
FileInfo fileInfo = new(fileName);
|
||||||
if (string.IsNullOrEmpty(outputDir))
|
if (string.IsNullOrEmpty(outputDir))
|
||||||
{
|
{
|
||||||
@@ -44,9 +37,10 @@ namespace ExcelTool.Parser
|
|||||||
var type = tableData.Headers[i].FieldType.ToLower();
|
var type = tableData.Headers[i].FieldType.ToLower();
|
||||||
var data = row.StrList[i];
|
var data = row.StrList[i];
|
||||||
|
|
||||||
if (enumMap.ContainsKey(type))
|
// 未在 TypeRegistry 注册的类型(且不是 list<T>)当枚举处理,写入 byte
|
||||||
|
if (!TypeRegistry.Contains(type) && !IsGenericList(type))
|
||||||
{
|
{
|
||||||
type = enumMap[type];
|
type = "byte";
|
||||||
}
|
}
|
||||||
|
|
||||||
datas.Add(new Tuple<string, string>(type, data));
|
datas.Add(new Tuple<string, string>(type, data));
|
||||||
@@ -63,5 +57,8 @@ namespace ExcelTool.Parser
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static bool IsGenericList(string type) =>
|
||||||
|
type.StartsWith("list<") && type.EndsWith(">");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user