C#将XML字符串转换成实体对象,并去除cdata
<xml><ToUserName><![CDATA[gh_8b13cf658f77]]></ToUserName>
<FromUserName><![CDATA[oBvnj5v9LlSagr_XjCLChg7acR30]]></FromUserName>
<CreateTime>1639555238</CreateTime>
<MsgType><![CDATA[event]]></MsgType>
<Event><![CDATA[subscribe]]></Event>
<EventKey><![CDATA[]]></EventKey></xml>
如上xml字符串是关注微信公众时,微信返回的数据
public static T GetXmlModel<T>(T model, string xmlString) where T : class { try { XmlDocument xml = new XmlDocument(); xml.LoadXml(xmlString);//把xml格式的字符串转为XMLDataDocument对象 Dictionary<string, string> xmlDic = new Dictionary<string, string>(); XmlNodeList data = xml.DocumentElement.ChildNodes;//得到的是xml对象的节点数组 for (int i = 0; i < data.Count; i++) { xmlDic.Add(data.Item(i).LocalName, data.Item(i).InnerText); } var m = model.GetType(); foreach (PropertyInfo p in m.GetProperties()) { string name = p.Name; if (xmlDic.Keys.Contains(name)) { string value = xmlDic.Where(x => x.Key == name).FirstOrDefault().Value; p.SetValue(model, string.IsNullOrEmpty(value) ? null : Convert.ChangeType(value, p.PropertyType), null); } } return model; } catch (Exception ex) { return model; } }
调用方法
var param = new XMLModel(); string bodyStr=@"<xml><ToUserName><![CDATA[gh_8b13cf658f77]]></ToUserName> <FromUserName><![CDATA[oBvnj5v9LlSagr_XjCLChg7acR30]]></FromUserName> <CreateTime>1639555238</CreateTime> <MsgType><![CDATA[event]]></MsgType> <Event><![CDATA[subscribe]]></Event> <EventKey><![CDATA[]]></EventKey>"; var obj=GetModel<XMLModel>(param, bodyStr);
实体类
public class XMLModel { /// <summary> /// /// </summary> public string FromUserName { get; set; } /// <summary> /// /// </summary> public string CreateTime { get; set; } /// <summary> /// /// </summary> public string MsgType { get; set; } /// <summary> /// /// </summary> public string Event { get; set; } /// <summary> /// /// </summary> public string EventKey { get; set; } }
本文来自博客园,作者:汪小让,转载请注明原文链接:https://www.cnblogs.com/wangxiaorang/p/15723387.html
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
· 字符编码:从基础到乱码解决
· 提示词工程——AI应用必不可少的技术