private List <DType> CreateBeanFields(DefBean bean, ExcelStream stream) { var list = new List <DType>(); foreach (DefField f in bean.HierarchyFields) { try { //string sep = f.Tags.TryGetValue("tag", out var s) ? s : null; //if (string.IsNullOrWhiteSpace(sep)) //{ list.Add(f.CType.Apply(this, stream)); //} //else //{ // list.Add(f.CType.Apply(this, new ExcelStream(stream.ReadCell(), sep))); //} } catch (DataCreateException dce) { dce.Push(bean, f); throw; } catch (Exception e) { var dce = new DataCreateException(e, stream.LastReadDataInfo); dce.Push(bean, f); throw dce; } } return(list); }
public DType Accept(TBean type, XElement x, DefAssembly ass) { var bean = (DefBean)type.Bean; DefBean implBean; if (bean.IsAbstractType) { string subType = x.Attribute(DefBean.TYPE_NAME_KEY)?.Value; if (string.IsNullOrWhiteSpace(subType)) { throw new Exception($"bean:'{bean.FullName}'是多态,需要指定{DefBean.TYPE_NAME_KEY}属性.\n xml:{x}"); } implBean = DataUtil.GetImplTypeByNameOrAlias(bean, subType); } else { implBean = bean; } var fields = new List <DType>(); foreach (DefField f in implBean.HierarchyFields) { var feles = x.Elements(f.Name); XElement fele = feles.FirstOrDefault(); if (fele == null) { if (f.CType.IsNullable) { fields.Add(null); continue; } throw new Exception($"字段:{f.Name} 缺失"); } try { fields.Add(f.CType.Apply(this, fele, ass)); } catch (DataCreateException dce) { dce.Push(implBean, f); throw; } catch (Exception e) { var dce = new DataCreateException(e, ""); dce.Push(bean, f); throw dce; } } return(new DBean(type, implBean, fields)); }
public DType Accept(TBean type, JsonElement x, DefAssembly ass) { var bean = (DefBean)type.Bean; DefBean implBean; if (bean.IsAbstractType) { if (!x.TryGetProperty(DefBean.TYPE_NAME_KEY, out var typeNameProp)) { throw new Exception($"结构:'{bean.FullName}' 是多态类型,必须用 '{DefBean.TYPE_NAME_KEY}' 字段指定 子类名"); } string subType = typeNameProp.GetString(); implBean = DataUtil.GetImplTypeByNameOrAlias(bean, subType); } else { implBean = bean; } var fields = new List <DType>(); foreach (DefField f in implBean.HierarchyFields) { if (x.TryGetProperty(f.Name, out var ele)) { if (ele.ValueKind == JsonValueKind.Null || ele.ValueKind == JsonValueKind.Undefined) { if (f.CType.IsNullable) { fields.Add(null); } else { throw new Exception($"结构:'{implBean.FullName}' 字段:'{f.Name}' 不能 null or undefined "); } } else { try { fields.Add(f.CType.Apply(this, ele, ass)); } catch (DataCreateException dce) { dce.Push(bean, f); throw; } catch (Exception e) { var dce = new DataCreateException(e, ""); dce.Push(bean, f); throw dce; } } } else if (f.CType.IsNullable) { fields.Add(null); } else { throw new Exception($"结构:'{implBean.FullName}' 字段:'{f.Name}' 缺失"); } } return(new DBean(type, implBean, fields)); }