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, sbJSON, 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中XML转JSON的方法的更多相关文章
- ASP.net中导出Excel的简单方法介绍
		
下面介绍一种ASP.net中导出Excel的简单方法 先上代码:前台代码如下(这是自己项目里面写的一点代码先贴出来吧) <div id="export" runat=&quo ...
 - xml转json的方法
		
.第一种方法 使用JSON-JAVA提供的方法,之前一直使用json-lib提供的方法转json,后来发现了这个开源项目,觉得用起来很不错,并且可以修改XML.java中的parse方法满足自己的转换 ...
 - C#中XML和json互相转换
		
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Xm ...
 - asp.net中获取当前url的方法
		
HttpContext.Current.Request.Url.ToString() 并不可靠. 如果当前URL为 http://localhost/search.aspx?user=http://c ...
 - 在Asp.Net中使用SmtpMail发送邮件的方法
		
在ASP中,就可以通过调用CDONTS组件发送简单邮件,在ASP.Net中,自然也可以.不同的是,.Net Framework中,将这一组件封装到了System.Web.Mail命名空间中. 一个典型 ...
 - 慎重Asp.net中static变量的使用方法
		
在.Net平台下进行CS软件开发时,我们常常遇到以后还要用到某些变量上次改动后的值,为了简单起见,非常多人都习惯用static来定义这些变量,我也是.这样非常方便.下一次调用某个函数时该变量仍然保存的 ...
 - java中常见的json解析方法、库以及性能对比
		
常见的json解析有原生的JSONObject和JSONArray方法,谷歌的GSON库,阿里的fastjson,还有jackson,json-lib. Gson(项目地址:https://githu ...
 - java 中xml转换为json对象
		
1.前提须要jar包: json-lib-2.4-jdk15.jar 和 xom-1.2.5.jar ,maven 仓库: net.sf.json-lib json-lib 2.4 jdk15 xom ...
 - java中Xml、json之间的相互转换
		
旁白: 最近关于xml与json之间的转换都搞蒙了,这里写一个demo,以后备用. 正题: project格式是: jar包是一个一个检出来的,还算干净了. 代码: 工具类: package exer ...
 
随机推荐
- Windows编译Nodejs时遇到 File "configure", line 313 SyntaxError: invalid syntax Failed to create vc project files. 时的解决方法
			
第一次编译的时候电脑上未安装python,遂下载了python最新版本3.3.3,但是报了下面这个错误. 把python降到2.7.*的版本即可. 我这里测试2.7.6和2.7.3版本可以正常编译.
 - ASP.Net中使用XMLDataSource
			
在Web开发中,程序和数据库打交道是常有的事情.在平时使用过程中,使用较多的是MS SQLSERVER,因此经常用到SQLDataSource将数据绑定的数据控件上.有时数据量较小,无需要在数据库中创 ...
 - PKU 1509  Glass Beads (最小表示法)
			
题意:有一个环形字符串,让你找一个位置切一刀使得字符串字母序最小.输出这个位置. 思路:能够看成两个字符串比較.一个是从下标0開始(0~n-1),一个从下标1開始(1~n-1,0). 然后两个指针i= ...
 - zoj-3792-Romantic Value-最小割+数值转化
			
假设不须要求边的个数的话,就是一个裸的最小割问题. 求边的个数就用边的权值记录一下. #include <stdio.h> #include <iostream> #inclu ...
 - 你如何破解后安装PS cs6
			
至于破解程序猿支持,资源共享是只有更好的,我相信有很多孩子还在用cs5看版本号.假设你想尝试新的版本号PS.但很长一段时间不能找到字的串行数.现在,你如何支付你的序列号和使用永久裂纹PS cs6. 好 ...
 - Webx相框:RequestContext详细说明
			
RequestContext RequestContext它可以被看作是request和response飞度.多于RequestContext还可以串起来.喜欢Filter像链条. 每个外Reques ...
 - SpringAccess数据库(oracle)构造
			
陈科朝:http://blog.csdn.net/u013474104/article/details/44279309 ================ 1.spring 对数据库訪问的支持 当我们 ...
 - hdu 5060 War
			
War Time Limit: 8000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...
 - MySQL JDBC的queryTimeout坑
			
遇到一个MySQL JDBC跑execute规定的方法queryTimeout坑,更恶心,无论是BUG,不能,^_^,为什么要说?请看下面的说明: 现象: 用同一个Connection运行大批量SQL ...
 - ABP日志管理
			
ABP日志管理 基于DDD的现代ASP.NET开发框架--ABP系列之8.ABP日志管理 ABP是“ASP.NET Boilerplate Project (ASP.NET样板项目)”的简称. ABP ...