欢迎您访问我爱IT技术网,今天小编为你分享的编程技术是:【ASP.NET中XML转JSON的方法实例】,下面是详细的讲解!
ASP.NET中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为后台,做搜索操作,得到的数据传出来转...
答:这个你参考一下API中的例子 , 很容易就看明白了 grid..需要有store , columns... store 负责 获取 , 解析 , 存储数据 columns 是表头 >>详细
相关问题:asp.net如何用jquery传送和接收json或者xml?关键...
答:在前台把要收集的信息用ajax的setquerystring传到后台, 后台用formcollection接收前台信息并处理, 处理之后返回一个json类型的返回值, 前台用setsuccess把json获取并加以利用。 就这样的流程。。 >>详细
相关问题:java对象怎么转json数组 跪求啊
答:JSON-lib这个Java类包用于把bean,map和XML转换成JSON并能够把JSON转回成bean和DynaBean。 下载地址:http://json-lib.sourceforge.net/ 还要需要的第3方包: org.apache.commons(3.2以上版本) org.apache.oro net.sf.ezmorph(ezmorph-1.0.4.jar) n... >>详细
- 【asp】asp.net url重写浅谈-net-url重写
- 【DataSet】DataSet、DataTable、DataRow区别详解
- 【asp】asp.net 动态添加多个用户控件-net-动态添
- 【ASP】ASP.NET中内嵌页面代码的一个问题-NET-内
- 【As】Asp.net中的页面乱码的问题-sp--pn-ne-et
- 【增加记录】asp.net中获取新增加记录的ID Access
- 【创建】ASP.NET Web API教程 创建域模型的方法详
- 【Asp】Asp.net 页面调用javascript变量的值-net-
- 【ASP】ASP.NET 5升级后如何删除旧版本的DNX-NET5
- 【404页面】ASP.NET设置404页面返回302HTTP状态码
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
