ASP.NET中XML转JSON的方法
2014-02-20 12:52
393 查看
许多应用程序都将数据存储为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互转 http://www.studyofnet.com/news/298.html
相关文章推荐
- ASP.NET MVC WebApi 返回数据类型序列化控制(json,xml) 用javascript在客户端删除某一个cookie键值对 input点击链接另一个页面,各种操作。 C# 往线程里传参数的方法总结 TCP/IP 协议 用C#+Selenium+ChromeDriver 生成我的咕咚跑步路线地图 (转)值得学习百度开源70+项目
- ASP.NET中XML转换为JSON,JSON转换为XML的方法
- ASP.NET中XML转JSON的方法
- ASP.NET中XML转JSON的方法实例
- ASP.NET中XML转JSON的方法实例
- ASP.NET中XML转JSON的方法
- asp.net XML转JSON
- 步步为营:Asp.Net序列化Json格式的两种方法
- 转]ASP.NET生成XML的一些方法
- 【转载】战速决Flash ActionScript 3.0 - 以文本形式、XML形式和JSON形式与ASP.NET通信续
- 使用ASP.NET AJAX异步调用Web Service和页面中的类方法(10):服务器端和客户端数据类型的自动转换:以XML方式序列化数据、小结
- asp.net实现在XmlTextWriter中写入一个CDATA的方法
- ASP.NET POST XML JSON数据,发送与接收
- asp.net后台cs中的JSON格式变量在前台Js中调用方法!(前后台实例!)
- ASP.NET中的XML和JSON
- ASP.NET Web API 通过参数控制返回类型(JSON|XML)
- ASP.NET中读取XML文件4种方法
- ASP.NET提取多层嵌套json数据的方法
- ASP.NET读取XML文件4种方法
- asp.net实现输出xml的方法