ASP.NET中XML转JSON的方法实例
本文实例讲述了ASP.NET中XML转JSON的方法,分享给大家供大家参考。具体如下:
一般在许多应用程序中都将数据存储为XML的格式,而且会将数据以JSON的格式发送到客户端以做进一步处理。要实现这一点,它们必须将XML格式转换为JSON格式。
XML转JSON代码如下:
privatestaticstringXmlToJSON(XmlDocumentxmlDoc) { StringBuildersbJSON=newStringBuilder(); sbJSON.Append("{"); XmlToJSONnode(sbJSON,xmlDoc.DocumentElement,true); sbJSON.Append("}"); returnsbJSON.ToString(); } // XmlToJSONnode: OutputanXmlElement,possiblyaspartofahigherarray privatestaticvoidXmlToJSONnode(StringBuildersbJSON,XmlElementnode,boolshowNodeName) { if(showNodeName) sbJSON.Append("\\""+SafeJSON(node.Name)+"\\":"); sbJSON.Append("{"); //Buildasortedlistofkey-valuepairs // where keyiscase-sensitivenodeName // valueisanArrayListofstringorXmlElement // sothatweknowwhetherthenodeNameisanarrayornot. SortedListchildNodeNames=newSortedList(); // Addinallnodeattributes if(node.Attributes!=null) foreach(XmlAttributeattrinnode.Attributes) StoreChildNode(childNodeNames,attr.Name,attr.InnerText); // Addinallnodes foreach(XmlNodecnodeinnode.ChildNodes) { if(cnodeisXmlText) StoreChildNode(childNodeNames,"value",cnode.InnerText); elseif(cnodeisXmlElement) StoreChildNode(childNodeNames,cnode.Name,cnode); } //Nowoutputallstoredinfo foreach(stringchildnameinchildNodeNames.Keys) { ArrayListalChild=(ArrayList)childNodeNames[childname]; if(alChild.Count==1) OutputNode(childname,alChild[0],sbJSON,true); else { sbJSON.Append("\\""+SafeJSON(childname)+"\\":["); foreach(objectChildinalChild) OutputNode(childname,Child,sbJSON,false); sbJSON.Remove(sbJSON.Length-2,2); sbJSON.Append("],"); } } sbJSON.Remove(sbJSON.Length-2,2); sbJSON.Append("}"); } // StoreChildNode:StoredataassociatedwitheachnodeName // sothatweknowwhetherthenodeNameisanarrayornot. privatestaticvoidStoreChildNode(SortedListchildNodeNames,stringnodeName,objectnodeValue) { //Pre-processcontractionofXmlElement-s if(nodeValueisXmlElement) { //Convert <aa></aa>into"aa":null // <aa>xx</aa>into"aa":"xx" XmlNodecnode=(XmlNode)nodeValue; if(cnode.Attributes.Count==0) { XmlNodeListchildren=cnode.ChildNodes; if(children.Count==0) nodeValue=null; elseif(children.Count==1&&(children[0]isXmlText)) nodeValue=((XmlText)(children[0])).InnerText; } } //AddnodeValuetoArrayListassociatedwitheachnodeName //IfnodeNamedoesn'texistthenaddit objectoValuesAL=childNodeNames[nodeName]; ArrayListValuesAL; if(oValuesAL==null) { ValuesAL=newArrayList(); childNodeNames[nodeName]=ValuesAL; } else ValuesAL=(ArrayList)oValuesAL; ValuesAL.Add(nodeValue); } privatestaticvoidOutputNode(stringchildname,objectalChild,StringBuildersbJSON,boolshowNodeName) { if(alChild==null) { if(showNodeName) sbJSON.Append("\\""+SafeJSON(childname)+"\\":"); sbJSON.Append("null"); } elseif(alChildisstring) { if(showNodeName) sbJSON.Append("\\""+SafeJSON(childname)+"\\":"); stringsChild=(string)alChild; sChild=sChild.Trim(); sbJSON.Append("\\""+SafeJSON(sChild)+"\\""); } else XmlToJSONnode(sbJSON,(XmlElement)alChild,showNodeName); sbJSON.Append(","); } //MakeastringsafeforJSON privatestaticstringSafeJSON(stringsIn) { StringBuildersbOut=newStringBuilder(sIn.Length); foreach(charchinsIn) { if(Char.IsControl(ch)||ch=='\\'') { intich=(int)ch; sbOut.Append(@"\\u"+ich.ToString("x4")); continue; } elseif(ch=='\\"'||ch=='\\\\'||ch=='/') { sbOut.Append('\\\\'); } sbOut.Append(ch); } returnsbOut.ToString(); }
希望本文所述对大家的asp.net程序设计有所帮助。