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 ...
随机推荐
- FTP定时批量下载文件(SHELL脚本及使用方法 ) (转)--good
#/bin/bash URL="http://192.168.5.100/xxx.php" check() { RESULT=$(curl -s $URL) echo $RESUL ...
- TestNg它@Factory详细解释------如何更改参数值测试
原创文章,版权所有所有.转载,归因:http://blog.csdn.net/wanghantong TestNg的@Factory注解从字面意思上来讲就是採用工厂的方法来创建測试数据并配合完毕測试 ...
- Python 相机镜头
一哥第一卷感叹,这家奥地利~.这是什么g8事件,近盲目安装3g的OpenCV,结果徒劳. . . 入题.!环境Python2.7 严厉格按照什么步骤.必成功: 所需的软件如下面: VideoCaptu ...
- linux下各种文件格式的压缩以及解压缩命令
From : http://blog.csdn.net/mu0206mu/article/details/17732857 -------------------------------------- ...
- mysql位_01检查错误代码的方法
1 看到官方帮助文档 当前最新版本号的错误码见 http://dev.mysql.com/doc/refman/5.7/en/error-handling.html 2 在安装mysql的环境中调用m ...
- SQL Prompt——SQL智能提示插件
数据库是大家在项目开发中肯定会用到的,C#项目用的最多的就是微软自家的SQL Server了.不可否认,微软的Visual Studio开发平台很好用,很直观的体现就是智能提示.敲几个字符,相关的信息 ...
- 第22章 职责链模式(Chain of Responsibility)
原文 第22章 职责链模式(Chain of Responsibility) 职责链模式 导读:职责链模式是一个既简单又复杂的设计模式,刚开始学习这个设计模式的时候光示例都看了好几遍.就为了理清里面的 ...
- Win8.1 Update如何禁用OneDrive同步服务
原文 Win8.1 Update如何禁用OneDrive同步服务 上周,IT之家为爱好者分享Win8.1 Update如何提高OneDrive上传速度教程.但是,由于国内特殊网络环境,导致微软OneD ...
- CSharp设计模式读书笔记(19):备忘录模式(学习难度:★★☆☆☆,使用频率:★★☆☆☆)
备忘录模式(Memento Pattern):在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态.它是一种对象行为型模式,其别名为Tok ...
- 位记录——Windows 7已安装Sublime Text 3、cynwin、SublimeClang
转载请注明出处:http://blog.csdn.net/cywosp/article/details/34429697 1. 到https://www.cygwin.com/下载setup-x86_ ...