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 arrayprivate 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 attributesif( node.Attributes!=null)foreach (XmlAttribute attr in node.Attributes)StoreChildNode(childNodeNames,attr.Name,attr.InnerText);// Add in all nodesforeach (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 infoforeach (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-sif (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 itobject oValuesAL = childNodeNames[nodeName];ArrayList ValuesAL;if (oValuesAL == null){ValuesAL = new ArrayList();childNodeNames[nodeName] = ValuesAL;}elseValuesAL = (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) + "\\"");}elseXmlToJSONnode(sbJSON, (XmlElement)alChild, showNodeName);sbJSON.Append(", ");}// Make a string safe for JSONprivate 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();}

JSON格式转换为XML格式

/**//// <summary>/// json字符串转换为Xml对象/// </summary>/// <param name="sJson"></param>/// <returns></returns>public static XmlDocument Json2Xml(string sJson){//XmlDictionaryReader reader = JsonReaderWriterFactory.CreateJsonReader(Encoding.UTF8.GetBytes(sJson), XmlDictionaryReaderQuotas.Max);//XmlDocument doc = new XmlDocument();//doc.Load(reader);JavaScriptSerializer oSerializer = new JavaScriptSerializer();Dictionary<string, object> Dic = (Dictionary<string, object>)oSerializer.DeserializeObject(sJson);XmlDocument doc = new XmlDocument();XmlDeclaration xmlDec;xmlDec = doc.CreateXmlDeclaration("1.0", "gb2312", "yes");doc.InsertBefore(xmlDec, doc.DocumentElement);XmlElement nRoot = doc.CreateElement("root");doc.AppendChild(nRoot);foreach (KeyValuePair<string, object> item in Dic){XmlElement element = doc.CreateElement(item.Key);KeyValue2Xml(element, item);nRoot.AppendChild(element);}return doc;}private static void KeyValue2Xml(XmlElement node, KeyValuePair<string, object> Source){object kValue = Source.Value;if (kValue.GetType() == typeof(Dictionary<string, object>)){foreach (KeyValuePair<string, object> item in kValue as Dictionary<string, object>){XmlElement element = node.OwnerDocument.CreateElement(item.Key);KeyValue2Xml(element, item);node.AppendChild(element);}}else if (kValue.GetType() == typeof(object[])){object[] o = kValue as object[];for (int i = 0; i < o.Length; i++){XmlElement xitem = node.OwnerDocument.CreateElement("Item");KeyValuePair<string, object> item = new KeyValuePair<string, object>("Item", o[i]);KeyValue2Xml(xitem, item);node.AppendChild(xitem);}}else{XmlText text = node.OwnerDocument.CreateTextNode(kValue.ToString());node.AppendChild(text);}}

参考资料:ASP.NET中XML和JSON互转http://www.studyofnet.com/news/298.html