【调整】excel之类的格式读取多态类型时,优先查找$type之类字段,再查找默认__type__字段
【修复】修复生成protocol序列化可空类型的代码的编译错误main
parent
ba269df862
commit
c52407bdee
|
|
@ -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} 标题列");
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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}' 字段指定 子类名");
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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} 字段指定 子类名");
|
||||||
|
|
|
||||||
|
|
@ -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}'列来指明是否可空");
|
||||||
|
|
|
||||||
|
|
@ -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))
|
||||||
{
|
{
|
||||||
|
|
|
||||||
|
|
@ -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}");
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
{
|
{
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue