ASP.NET中XML转JSON的方法实例
发布时间:2020-12-15 20:11:55 所属栏目:asp.Net 来源:网络整理
导读:本篇章节讲解ASP.NET中XML转JSON的方法,供大家参考研究。具体如下: 一般在许多应用程序中都将数据存储为XML的格式,而且会将数据以JSON的格式发送到客户端以做进一步处理。要实现这一点,它们必须将XML格式转换为JSON格式。 XML转JSON代码如下:
本篇章节讲解ASP.NET中XML转JSON的方法,分享给大家供大家参考。具体如下: 一般在许多应用程序中都将数据存储为XML的格式,而且会将数据以JSON的格式发送到客户端以做进一步处理。要实现这一点,它们必须将XML格式转换为JSON格式。 XML转JSON代码如下: 复制代码 代码如下: private static string XmlToJSON(XmlDocument xmlDoc)
{ StringBuilder sbJSON = new StringBuilder(); sbJSON.Append("{ "); XmlToJSONnode(sbJSON,xmlDoc.DocumentElement,true); sbJSON.Append("}"); return sbJSON.ToString(); } // XmlToJSONnode: Output an XmlElement,possibly as part of a higher array private static void XmlToJSONnode(StringBuilder sbJSON,XmlElement node,bool showNodeName) { if (showNodeName) sbJSON.Append(""" + SafeJSON(node.Name) + "": "); sbJSON.Append("{"); // Build a sorted list of key-value pairs // where key is case-sensitive nodeName // value is an ArrayList of string or XmlElement // so that we know whether the nodeName is an array or not. SortedList childNodeNames = new SortedList(); // Add in all node attributes if( node.Attributes!=null) foreach (XmlAttribute attr in node.Attributes) StoreChildNode(childNodeNames,attr.Name,attr.InnerText); // Add in all nodes foreach (XmlNode cnode in node.ChildNodes) { if (cnode is XmlText) StoreChildNode(childNodeNames,"value",cnode.InnerText); else if (cnode is XmlElement) StoreChildNode(childNodeNames,cnode.Name,cnode); } // Now output all stored info foreach (string childname in childNodeNames.Keys) { ArrayList alChild = (ArrayList)childNodeNames[childname]; if (alChild.Count == 1) OutputNode(childname,alChild[0],sbJSON,true); else { sbJSON.Append(" "" + SafeJSON(childname) + "": [ "); foreach (object Child in alChild) OutputNode(childname,Child,false); sbJSON.Remove(sbJSON.Length - 2,2); sbJSON.Append(" ],"); } } sbJSON.Remove(sbJSON.Length - 2,2); sbJSON.Append(" }"); } // StoreChildNode: Store data associated with each nodeName // so that we know whether the nodeName is an array or not. private static void StoreChildNode(SortedList childNodeNames,string nodeName,object nodeValue) { // Pre-process contraction of XmlElement-s if (nodeValue is XmlElement) { // Convert <aa></aa> into "aa":null // <aa>xx</aa> into "aa":"xx" XmlNode cnode = (XmlNode)nodeValue; if( cnode.Attributes.Count == 0) { XmlNodeList children = cnode.ChildNodes; if( children.Count==0) nodeValue = null; else if (children.Count == 1 && (children[0] is XmlText)) nodeValue = ((XmlText)(children[0])).InnerText; } } // Add nodeValue to ArrayList associated with each nodeName // If nodeName doesn't exist then add it object oValuesAL = childNodeNames[nodeName]; ArrayList ValuesAL; if (oValuesAL == null) { ValuesAL = new ArrayList(); childNodeNames[nodeName] = ValuesAL; } else ValuesAL = (ArrayList)oValuesAL; ValuesAL.Add(nodeValue); } private static void OutputNode(string childname,object alChild,StringBuilder sbJSON,bool showNodeName) { if (alChild == null) { if (showNodeName) sbJSON.Append(""" + SafeJSON(childname) + "": "); sbJSON.Append("null"); } else if (alChild is string) { if (showNodeName) sbJSON.Append(""" + SafeJSON(childname) + "": "); string sChild = (string)alChild; sChild = sChild.Trim(); sbJSON.Append(""" + SafeJSON(sChild) + """); } else XmlToJSONnode(sbJSON,(XmlElement)alChild,showNodeName); sbJSON.Append(","); } // Make a string safe for JSON private static string SafeJSON(string sIn) { StringBuilder sbOut = new StringBuilder(sIn.Length); foreach (char ch in sIn) { if (Char.IsControl(ch) || ch == ''') { int ich = (int)ch; sbOut.Append(@"u" + ich.ToString("x4")); continue; } else if (ch == '"' || ch == '\' || ch == '/') { sbOut.Append('\'); } sbOut.Append(ch); } return sbOut.ToString(); } 希望本文所述对大家的asp.net程序设计有所帮助。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-mvc-3 – 如何在MVC3中格式化小数超过2位小数
- 二进制数据的序列化反序列化和Json的序列化反序列化的重要区
- .net-core – VS 2017中缺少ASP.NET Core 2模板
- asp.net-mvc – T4MVC基本控制器没有默认构造函数
- asp.net core 3.0 gRPC框架小试
- asp.net-mvc – ASP.Net MVC SQLExpress生产环境更新场景
- “ASP.NET”错误:拒绝访问远程服务器,因为不存在登录映射
- ASP.Net HttpHandler ProcessRequest()触发两次
- ASP.NET linkbutton两次提高onBeforeUnload事件
- asp.net – jQuery模态窗体对话框回发问题