IList与 Xml互相转换

尝试使用CubeMX做stm32开发之九:SYS配置 参考《STM32中文参考手册_V10》,研究CubeMX中有关SYS的配置 阅读详情

using System;
using System.Data;
using System.Collections.Generic;
using System.Text;
using System.Xml;
using System.Reflection;


///   <summary>
///  实体转Xml,Xml转实体类
///   </summary>
///   <typeparam name="T"></typeparam>
public class XmlHelper<T> where T : new()
{
    #region  实体类转成Xml
    ///   <summary>
    ///  对象实例转成xml
    ///   </summary>
    ///   <param name="item"> 对象实例 </param>
    ///   <returns></returns>
    public static string EntityToXml(T item)
    {
        IList<T> items = new List<T>();
        items.Add(item);
        return EntityToXml(items);
    }

    ///   <summary>
    ///  对象实例集转成xml
    ///   </summary>
    ///   <param name="items"> 对象实例集 </param>
    ///   <returns></returns>
    public static string EntityToXml(IList<T> items)
    {
        // 创建 XmlDocument文档
        XmlDocument doc = new XmlDocument();
        // 创建根元素
        XmlElement root = doc.CreateElement(typeof(T).Name + " s ");
        // 添加根元素的子元素集
        foreach (T item in items)
        {
            EntityToXml(doc, root, item);
        }
        // 向 XmlDocument文档添加根元素
        doc.AppendChild(root);
        return doc.InnerXml;
    }

    private static void EntityToXml(XmlDocument doc, XmlElement root, T item)
    {
        // 创建元素
        XmlElement xmlItem = doc.CreateElement(typeof(T).Name);
        // 对象的属性集
        System.Reflection.PropertyInfo[] propertyInfo = typeof(T).GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance);

        foreach (System.Reflection.PropertyInfo pinfo in propertyInfo)
        {
            if (pinfo != null)
            {
                // 对象属性名称
                string name = pinfo.Name;
                // 对象属性值
                string value = String.Empty;

                if (pinfo.GetValue(item, null) != null)
                    value = pinfo.GetValue(item, null).ToString(); // 获取对象属性值
                // 设置元素的属性值
                xmlItem.SetAttribute(name, value);
            }
        }
        // 向根添加子元素
        root.AppendChild(xmlItem);
    }


    #endregion

    #region  Xml转成实体类

    ///   <summary>
    ///  Xml 转成对象实例
    ///   </summary>
    ///   <param name="xml"> xml </param>
    ///   <returns></returns>
    public static T XmlToEntity(string xml)
    {
        IList<T> items = XmlToEntityList(xml);
        if (items != null && items.Count > 0)
            return items[0];
        else return default(T);
    }

    ///   <summary>
    ///  Xml 转成对象实例集
    ///   </summary>
    ///   <param name="xml"> xml </param>
    ///   <returns></returns>
    public static IList<T> XmlToEntityList(string xml)
    {
        XmlDocument doc = new XmlDocument();
        try
        {
            doc.LoadXml(xml);
        }
        catch
        {
            return null;
        }
        if (doc.ChildNodes.Count != 1)
            return null;
        if (doc.ChildNodes[0].Name.ToLower() != typeof(T).Name.ToLower() + " s ")
            return null;

        XmlNode node = doc.ChildNodes[0];

        IList<T> items = new List<T>();

        foreach (XmlNode child in node.ChildNodes)
        {
            if (child.Name.ToLower() == typeof(T).Name.ToLower())
                items.Add(XmlNodeToEntity(child));
        }

        return items;
    }

    private static T XmlNodeToEntity(XmlNode node)
    {
        T item = new T();

        if (node.NodeType == XmlNodeType.Element)
        {
            XmlElement element = (XmlElement)node;

            System.Reflection.PropertyInfo[] propertyInfo = typeof(T).GetProperties(System.Reflection.BindingFlags.Public | System.Reflection.BindingFlags.Instance);

            foreach (XmlAttribute attr in element.Attributes)
            {
                string attrName = attr.Name.ToLower();
                string attrValue = attr.Value.ToString();
                foreach (System.Reflection.PropertyInfo pinfo in propertyInfo)
                {
                    if (pinfo != null)
                    {
                        string name = pinfo.Name.ToLower();
                        Type dbType = pinfo.PropertyType;
                        if (name == attrName)
                        {
                            if (String.IsNullOrEmpty(attrValue))
                                continue;
                            switch (dbType.ToString())
                            {
                                case "System.Int32":
                                    pinfo.SetValue(item, Convert.ToInt32(attrValue), null);
                                    break;
                                case "System.Boolean":
                                    pinfo.SetValue(item, Convert.ToBoolean(attrValue), null);
                                    break;
                                case "System.DateTime":
                                    pinfo.SetValue(item, Convert.ToDateTime(attrValue), null);
                                    break;
                                case "System.Decimal":
                                    pinfo.SetValue(item, Convert.ToDecimal(attrValue), null);
                                    break;
                                case "System.Double":
                                    pinfo.SetValue(item, Convert.ToDouble(attrValue), null);
                                    break;
                                default:
                                    pinfo.SetValue(item, attrValue, null);
                                    break;
                            }
                            continue;
                        }
                    }
                }
            }
        }
        return item;
    }

    #endregion
}

 

uniapp(全端兼容) - 实现点击输入框时完美顶起键盘,获取键盘高度动态计算顶起距离,解决软键盘弹出时输入框被覆盖问题,uniapp微信小程序/移动端h5网页/安卓苹果app(示例代码,一键复制 uniapp,支付宝微信小程序,移动端H5网页网站,软键盘弹出位置不对,软键盘挡住了输入框怎么办,获取键盘高度计算弹出距离,uniapp如何解决输入框input激活后键盘弹出遮挡问题,uniapp输入框偶尔被键盘遮挡,解决uniapp在App环境下输入框被软键盘遮挡的问题,uniapp 完美解决苹果和安卓input框遮挡兼容问题,uniapp输入框拉起软键盘时,输入框显示不全,被软键盘挡住一半,input被键盘遮挡的解决方案,软键盘遮挡输入框,uniapp软键盘顶不起来输入框,输入框没有被软键盘弹出来怎么办 阅读详情

相关推荐

C#将Listxml互转 支持简单类型

C#将Listxml互转 支持简单类型 list转xml xml转list

C# XML实体互转,实体类反序列化属性对应转换XmlAttribute

一、前言 可扩展标记语言 (XML) 是具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。XML是用来存储数据的,重在数据本身。本文中的代码是几个月前整理的,最近几个月的时间很少写随笔,除了工作以外,主要还是忙于整理自己的框架。这篇随笔主要是针对于XML的特性Attribute实体之间的匹配转换,其中的内容包括反射、XML以及LinqT

qiandeqiande的专栏 5382

北理乐学C语言答案-最新.docx

北理乐学C语言答案-最新.docx

C#导出List数据到xml文件[附源码]

C#导出List数据到xml文件,这里主要用到的是:XmlSerializer类 (System.Xml.Serialization) 将对象序列化到 XML 文档中和从 XML 文档中反序列化对象。XmlSerializer使您得以控制如何将对象编码到 XML 中。 实体类代码: /// <summary> /// 用户实体...

weixin_33862188的博客 802

IListXml互相转换

using System; using System.Data; using System.Collections.Generic; using System.Text; using System.Xml; using System.Reflection; namespace YKSoft.BLL.Utility { /// /// 实体转XmlXml转实体类 /// /// publi

脑瓜子的程序人生 1331

NHibernate调用Oracle存储过程的生产级集成方案

Oracle存储过程是传统企业级应用的核心数据逻辑载体,其调用需遵循CallableStatement协议,涉及参数方向、SYS_REFCURSOR游标处理等底层机制。NHibernate通过OracleDataClientDriver实现对Oracle特有类型的支持,但因Oracle官方驱动未继承DbConnection基类,导致hbm2ddl.keywords校验失败、SchemaExport中断等兼容性问题。该技术方案不仅解决驱动适配语法映射,更覆盖参数契约设计、字段显式声明、异常安全游标管理及RA

chuji3953的博客 407

依赖注入实战:从游戏打怪场景理解IoC策略模式

依赖注入(DI)是面向对象软件设计中解耦组件、提升可维护性的核心实践,其本质是将行为或能力的创建使用分离,实现控制反转(IoC)。它并非具体设计模式,而是贯穿策略模式、工厂模式等技术的协作哲学。通过封装变化点(如不同武器的伤害算法),DI显著增强代码的可读性、可测试性运行时扩展能力。在游戏开发、微服务、企业级应用等高频变更场景中,DI支撑着配置驱动、热更新、多态切换等关键工程需求。本文以真实ARPG打怪逻辑为切口,深入剖析构造注入、Setter注入依赖获取三种方式的适用边界、生命周期管理及典型陷阱,助

rongdmmap的博客 386

C#动态对象实战:Clay行为驱动的动态编程模型

在强类型语言中实现安全可控的动态行为,是现代.NET开发的关键能力之一。Clay通过Behavior模式重构dynamic语义,以TryGetMember/TryInvokeMember等运行时拦截机制,替代ExpandoObject的简单字典存储,天然支持链式调用、动态集合接口桥接。其核心价值在于不破坏编译期类型安全的前提下,提供类似JavaScript的对象灵活性,特别适用于JSON结构映射、CMS内容建模、API适配层及配置驱动型系统。本文深入解析Clay的ClayBehavior设计哲学、Clay

chuji3953的博客 329

pom.xml 中 jquery webjars 依赖解释

pom.xml 中 jquery webjars 依赖解释

马优晨 241

JSON /XML转换

命名控件需要XML转Json/JObject 用到的全部核心API核心转换静态方法JsonConvert.SerializexNode();//再把JSON字符串转换为JObject。

like_sunshine978的博客 217

PDF 多格式解析如何避免混用输出:TEXT、HTML、XML TAG 数据契约

PDF 多格式解析如何避免混用输出,关键不是完成一次调用,而是让输入口径、处理状态和结果证据可以复核。本文围绕“如何按明确输出类型解析 PDF,并分别验收 TEXT、HTML、XML 和 TAG 结果”给出一套面向真实业务流程的实现方式。

DevOpenClub 专栏 325

JAVA :JSONObject转换XML

开发需同时提供JSONXML接口,通过dom4j和fastjson2实现JSON转XML工具类,支持嵌套对象、数组及完整XML文档输出,并展示接口封装示例。

熬过万丈孤独,藏下星辰大海 31

MyBatis XML Mapper 标签 CRUD 原理实战

本文面向使用 MyBatis XML Mapper 编写 SQL 的 Java 开发者,讲清 `select`、`insert`、`update`、`delete` `if`、`choose`、`where`、`set`、`foreach` 等标签的职责、组合方式和边界。核心判断是:XML 动态 SQL 的可靠性不取决于标签数量,而取决于参数命名、SQL 结构收敛和 `#{}` 参数化约束。读完可独立编写常见查询、条件更新、批量操作,并定位空条件、主键回填和注入风险。

山路曲折盘旋,但毕竟朝着顶峰延伸 227

osmdroid 图层系统设计:一个模型扛住 8 种数据 + XML 持久化

把"数据来源"和"图层配置"分开:来源决定怎么读,配置决定画成什么样,两者解耦。用一个统一图层模型承载dataType标签 + 显示属性,新增数据类型只加一个路由分支。渲染走统一管线:遍历配置、跳过不可见、按类型路由到数据源。图层列表可整体序列化为一份 XML,启动读回、退出保存。持久化要有默认值兜底,配置缺失/损坏时回退默认,不崩溃。完整工程源码见:https://gitcode.com/qq_16064871/android_osmdroid_maplibre。

mmsx990的博客 411

定制 OCR 服务:非标证件表格的 XML 字段映射实践

定制 OCR 通过小样本学习、XML 映射配置和持续学习机制,让这一公里变得可工程化、可交付、可维护。楚识科技将持续聚焦定制 OCR 领域,帮助行业客户和集成商以更低成本、更快速度获得高质量结构化识别能力,让 OCR 文字识别真正转化为业务可用的数据资产。

qq_34572574的博客 374

基于SpringBoot+Vue校园失物招领系统的设计实现

校园失物招领系统的设计实现前端采用了Vue框架,并结合ElementUI来实现界面的设计布局。后端采用了SpringBoot框架进行开发设计,并结合了Java语言和MySQL数据库来实现。在功能上分为了前端用户模块和管理员模块。前端用户模块主要实现了招领物品信息的发布、查询管理,失物信息的发布、管理以及自动匹配招领物品,查看校园相关通知公告。管理员模块主要实现了物品分类管理、校园通知管理以及物品招领信息的查询统计等功能。校园失物招领系统的实现优化失物招领的流程,提高了校园失物招领的效率,促进了校园文化的建设,营造了良好的诚信氛围。

科技成果转化效率低怎么办?.docx

科易网基于40亿+科创知识图谱数据库,深度探索AI技术在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,研究科技创新领域的AI+数智化解决方案,推动科技创新产业创新智能化发展。

上一篇: 通用附件上传方法
下一篇: 向日历控件中添加自定义内容
dz45693
博客等级 码龄20年 737粉丝 579原创
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值