【调整】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 (!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} 标题列");
}

View File

@ -112,7 +112,7 @@ namespace Luban.Job.Cfg.DataCreators
DefBean implBean;
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}' 字段指定 子类名");
}

View File

@ -154,14 +154,14 @@ namespace Luban.Job.Cfg.DataCreators
if (bean.IsAbstractType)
{
string subType;
if (table.ContainsKey(DefBean.FALLBACK_TYPE_NAME_KEY))
{
subType = (string)table[DefBean.FALLBACK_TYPE_NAME_KEY];
}
else if(table.ContainsKey(DefBean.LUA_TYPE_NAME_KEY))
if(table.ContainsKey(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
{
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;
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)
{
throw new Exception($"type:'{originBean.FullName}' 是多态类型,需要定义'{DefBean.EXCEL_TYPE_NAME_KEY}'列来指定具体子类型");
@ -421,7 +421,7 @@ namespace Luban.Job.Cfg.DataCreators
{
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)
{
throw new Exception($"type:'{originBean.FullName}' 是可空类型,需要定义'{DefBean.EXCEL_TYPE_NAME_KEY}'列来指明是否可空");

View File

@ -96,10 +96,10 @@ namespace Luban.Job.Cfg.DataCreators
DefBean implBean;
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))
{
subType = x.Attribute(DefBean.XML_TYPE_NAME_KEY)?.Value;
subType = x.Attribute(DefBean.FALLBACK_TYPE_NAME_KEY)?.Value;
}
if (string.IsNullOrWhiteSpace(subType))
{

View File

@ -102,8 +102,8 @@ namespace Luban.Job.Cfg.DataCreators
return new DText(key, text);
}
private static readonly YamlScalarNode s_typeNodeName = new(DefBean.FALLBACK_TYPE_NAME_KEY);
private static readonly YamlScalarNode s_typeNodeName2 = new(DefBean.JSON_TYPE_NAME_KEY);
private static readonly YamlScalarNode s_typeNodeName = 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)
{
@ -113,7 +113,7 @@ namespace Luban.Job.Cfg.DataCreators
DefBean implBean;
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}");
}

View File

@ -10,7 +10,7 @@ namespace Luban.Job.Common.TypeVisitors
{
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
{