• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    ASP.NET中XML转JSON的方法实例

    本文实例讲述了ASP.NET中XML转JSON的方法,分享给大家供大家参考。具体如下:

    一般在许多应用程序中都将数据存储为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的js代码
    • C# XML与Json之间相互转换实例详解
    • 对比分析json及XML
    • json跟xml的对比分析
    • JavaScript将XML转成JSON的方法
    • JavaScript原生xmlHttp与jquery的ajax方法json数据格式实例
    • 如何在JS中实现相互转换XML和JSON
    上一篇:.net平台推送ios消息的实现方法
    下一篇:ASP.NET中IsPostBack用法详解
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

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