【调整】excel之类的格式读取多态类型时,优先查找$type之类字段,再查找默认__type__字段

【修复】修复生成protocol序列化可空类型的代码的编译错误
main
walon 2022-02-12 21:46:09 +08:00
parent ba269df862
commit c52407bdee
7 changed files with 15 additions and 15 deletions

View File

@ -130,7 +130,7 @@ namespace Luban.Job.Cfg.DataConverts
{ {
if (data.Type.IsAbstractType) if (data.Type.IsAbstractType)
{ {
if (!x.SubTitles.TryGetValue(DefBean.FALLBACK_TYPE_NAME_KEY, out var typeTitle) && !x.SubTitles.TryGetValue(DefBean.EXCEL_TYPE_NAME_KEY, out typeTitle)) if (!x.SubTitles.TryGetValue(DefBean.EXCEL_TYPE_NAME_KEY, out var typeTitle) && !x.SubTitles.TryGetValue(DefBean.FALLBACK_TYPE_NAME_KEY, out typeTitle))
{ {
throw new Exception($"多态bean:{data.Type.FullName} 缺失 {DefBean.EXCEL_TYPE_NAME_KEY} 标题列"); throw new Exception($"多态bean:{data.Type.FullName} 缺失 {DefBean.EXCEL_TYPE_NAME_KEY} 标题列");
} }

View File

@ -112,7 +112,7 @@ namespace Luban.Job.Cfg.DataCreators
DefBean implBean; DefBean implBean;
if (bean.IsAbstractType) if (bean.IsAbstractType)
{ {
if (!x.TryGetProperty(DefBean.FALLBACK_TYPE_NAME_KEY, out var typeNameProp) && !x.TryGetProperty(DefBean.JSON_TYPE_NAME_KEY, out typeNameProp)) if (!x.TryGetProperty(DefBean.JSON_TYPE_NAME_KEY, out var typeNameProp) && !x.TryGetProperty(DefBean.FALLBACK_TYPE_NAME_KEY, out typeNameProp))
{ {
throw new Exception($"结构:'{bean.FullName}' 是多态类型,必须用 '{DefBean.JSON_TYPE_NAME_KEY}' 字段指定 子类名"); throw new Exception($"结构:'{bean.FullName}' 是多态类型,必须用 '{DefBean.JSON_TYPE_NAME_KEY}' 字段指定 子类名");
} }

View File

@ -154,14 +154,14 @@ namespace Luban.Job.Cfg.DataCreators
if (bean.IsAbstractType) if (bean.IsAbstractType)
{ {
string subType; string subType;
if (table.ContainsKey(DefBean.FALLBACK_TYPE_NAME_KEY)) if(table.ContainsKey(DefBean.LUA_TYPE_NAME_KEY))
{
subType = (string)table[DefBean.FALLBACK_TYPE_NAME_KEY];
}
else if(table.ContainsKey(DefBean.LUA_TYPE_NAME_KEY))
{ {
subType = (string)(table[DefBean.LUA_TYPE_NAME_KEY]); subType = (string)(table[DefBean.LUA_TYPE_NAME_KEY]);
} }
else if (table.ContainsKey(DefBean.FALLBACK_TYPE_NAME_KEY))
{
subType = (string)table[DefBean.FALLBACK_TYPE_NAME_KEY];
}
else else
{ {
throw new Exception($"结构:{bean.FullName} 是多态类型,必须用 {DefBean.LUA_TYPE_NAME_KEY} 字段指定 子类名"); throw new Exception($"结构:{bean.FullName} 是多态类型,必须用 {DefBean.LUA_TYPE_NAME_KEY} 字段指定 子类名");

View File

@ -399,7 +399,7 @@ namespace Luban.Job.Cfg.DataCreators
var originBean = (DefBean)type.Bean; var originBean = (DefBean)type.Bean;
if (originBean.IsAbstractType) if (originBean.IsAbstractType)
{ {
TitleRow typeTitle = row.GetSubTitleNamedRow(DefBean.FALLBACK_TYPE_NAME_KEY) ?? row.GetSubTitleNamedRow(DefBean.EXCEL_TYPE_NAME_KEY); TitleRow typeTitle = row.GetSubTitleNamedRow(DefBean.EXCEL_TYPE_NAME_KEY) ?? row.GetSubTitleNamedRow(DefBean.FALLBACK_TYPE_NAME_KEY);
if (typeTitle == null) if (typeTitle == null)
{ {
throw new Exception($"type:'{originBean.FullName}' 是多态类型,需要定义'{DefBean.EXCEL_TYPE_NAME_KEY}'列来指定具体子类型"); throw new Exception($"type:'{originBean.FullName}' 是多态类型,需要定义'{DefBean.EXCEL_TYPE_NAME_KEY}'列来指定具体子类型");
@ -421,7 +421,7 @@ namespace Luban.Job.Cfg.DataCreators
{ {
if (type.IsNullable) if (type.IsNullable)
{ {
TitleRow typeTitle = row.GetSubTitleNamedRow(DefBean.FALLBACK_TYPE_NAME_KEY) ?? row.GetSubTitleNamedRow(DefBean.EXCEL_TYPE_NAME_KEY); TitleRow typeTitle = row.GetSubTitleNamedRow(DefBean.EXCEL_TYPE_NAME_KEY) ?? row.GetSubTitleNamedRow(DefBean.FALLBACK_TYPE_NAME_KEY);
if (typeTitle == null) if (typeTitle == null)
{ {
throw new Exception($"type:'{originBean.FullName}' 是可空类型,需要定义'{DefBean.EXCEL_TYPE_NAME_KEY}'列来指明是否可空"); throw new Exception($"type:'{originBean.FullName}' 是可空类型,需要定义'{DefBean.EXCEL_TYPE_NAME_KEY}'列来指明是否可空");

View File

@ -96,10 +96,10 @@ namespace Luban.Job.Cfg.DataCreators
DefBean implBean; DefBean implBean;
if (bean.IsAbstractType) if (bean.IsAbstractType)
{ {
string subType = x.Attribute(DefBean.FALLBACK_TYPE_NAME_KEY)?.Value; string subType = x.Attribute(DefBean.XML_TYPE_NAME_KEY)?.Value;
if (string.IsNullOrEmpty(subType)) if (string.IsNullOrEmpty(subType))
{ {
subType = x.Attribute(DefBean.XML_TYPE_NAME_KEY)?.Value; subType = x.Attribute(DefBean.FALLBACK_TYPE_NAME_KEY)?.Value;
} }
if (string.IsNullOrWhiteSpace(subType)) if (string.IsNullOrWhiteSpace(subType))
{ {

View File

@ -102,8 +102,8 @@ namespace Luban.Job.Cfg.DataCreators
return new DText(key, text); return new DText(key, text);
} }
private static readonly YamlScalarNode s_typeNodeName = new(DefBean.FALLBACK_TYPE_NAME_KEY); private static readonly YamlScalarNode s_typeNodeName = new(DefBean.JSON_TYPE_NAME_KEY);
private static readonly YamlScalarNode s_typeNodeName2 = new(DefBean.JSON_TYPE_NAME_KEY); private static readonly YamlScalarNode s_typeNodeNameFallback = new(DefBean.FALLBACK_TYPE_NAME_KEY);
public DType Accept(TBean type, YamlNode x, DefAssembly y) public DType Accept(TBean type, YamlNode x, DefAssembly y)
{ {
@ -113,7 +113,7 @@ namespace Luban.Job.Cfg.DataCreators
DefBean implBean; DefBean implBean;
if (bean.IsAbstractType) if (bean.IsAbstractType)
{ {
if (!m.Children.TryGetValue(s_typeNodeName, out var typeNode) && !m.Children.TryGetValue(s_typeNodeName2, out typeNode)) if (!m.Children.TryGetValue(s_typeNodeName, out var typeNode) && !m.Children.TryGetValue(s_typeNodeNameFallback, out typeNode))
{ {
throw new Exception($"bean:'{bean.FullName}'是多态,需要指定{DefBean.JSON_TYPE_NAME_KEY}属性.\n xml:{x}"); throw new Exception($"bean:'{bean.FullName}'是多态,需要指定{DefBean.JSON_TYPE_NAME_KEY}属性.\n xml:{x}");
} }

View File

@ -10,7 +10,7 @@ namespace Luban.Job.Common.TypeVisitors
{ {
if (type.IsNullable) if (type.IsNullable)
{ {
return $"if({fieldName} != null){{ {bufName}.WriteBool(true); {type.Apply(CsUnderingSerializeVisitor.Ins, bufName, fieldName)} }} else {{ {bufName}.WriteBool(true); }}"; return $"if({fieldName} != null){{ {bufName}.WriteBool(true); {type.Apply(CsUnderingSerializeVisitor.Ins, bufName, type.Apply(CsIsRawNullableTypeVisitor.Ins) ? fieldName : fieldName + ".Value" )} }} else {{ {bufName}.WriteBool(true); }}";
} }
else else
{ {