源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

ASP.NET中XML转JSON的方法实例

  • 时间:2021-08-16 14:43 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:ASP.NET中XML转JSON的方法实例
本文实例讲述了ASP.NET中XML转JSON的方法,分享给大家供大家参考。具体如下: 一般在许多应用程序中都将数据存储为XML的格式,而且会将数据以JSON的格式发送到客户端以做进一步处理。要实现这一点,它们必须将XML格式转换为JSON格式。 XML转JSON代码如下:
[u]复制代码[/u] 代码如下:
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程序设计有所帮助。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部