net6.0解析实体字典

  • binGe博客
  • 开发笔记
  • 2024/1/25 17:16:31
  • 人已阅读
简介此代码来自项目:EntityDicGenerator
net6.0解析实体字典
            //结构:<doc>
            //<assembly>
            //<name>QcManage.Domain</name>
            //</assembly>
            //<members>
            //<member name = "T:OCR.WebAPI.Entitys" >
            //< summary >
            //实体基类
            //</ summary >
            //</ member >
            //</members>
            //</doc>
            OpenFileDialog openImageDialog = new OpenFileDialog();
            openImageDialog.Filter = "XML Files (*.xml)|*.xml";
            //openImageDialog.Multiselect = false;
            if (openImageDialog.ShowDialog() == DialogResult.OK)
            {
                //MessageBox.Show(openImageDialog.FileName);
                //var projectPath = Regex.Split(openImageDialog.FileName, @"bin\\", RegexOptions.IgnoreCase)[0];

                var namespaceName = openImageDialog.SafeFileName.Replace(".xml", "");
                XDocument doc = XDocument.Load(openImageDialog.FileName);
                //var list = doc.Descendants("member")  //定位到节点member
                //            .Where(p => p.Attribute("name").Value.StartsWith("T:" + namespaceName) &&
                //            !p.Attribute("name").Value.Contains("Dto") &&
                //            !p.Attribute("name").Value.Contains("Enum") &&
                //            !p.Attribute("name").Value.Contains("Common")).ToList(); //若要筛选就用上这个语句


                var assembly = Assembly.LoadFrom(openImageDialog.FileName.Replace(".xml", ".dll"));
                var ReferencedAssemblies = assembly.GetReferencedAssemblies();

                var classList = assembly.GetTypes().Where(t => t.IsClass && t.BaseType.FullName.Contains("BaseEntity") && !t.BaseType.FullName.Contains("Dto")).ToList();

                foreach (var item in classList)
                {
                    var nowTableFields = doc.Descendants("member").Where(p => p.Attribute("name").Value.StartsWith("P:" + namespaceName + "." + item.Name)).ToList();
                    foreach (var itemxxx in nowTableFields)
                    {

                    }
                    Helper.LogInfo(item.Name + "的表字段日志", item.Name, true);
                    foreach (var item2 in item.GetProperties())
                    {
                        var xxdd = 1;
                        //P:OCR.Domain.Sys_AreaSaler.ZoneCode
                        var descCn = nowTableFields.Where(xx => xx.Attribute("name").Value == "P:" + namespaceName + "." + item.Name + "." + item2.Name).FirstOrDefault()?.Element("summary").Value;
                        Helper.LogInfo("名称:" + item2.Name + "、中文描述:" + descCn?.Replace("\n", "").Trim() + "、类型:" + item2.PropertyType, item.Name, true);
                    }
                }
                //创建对象
                //var obj = Activator.CreateInstance(item2);
            }

文章评论

评论
  • 消灭零回复
Top