华域联盟 .Net ASP.NET中XML转JSON的方法实例

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

本文由 华域联盟 原创撰写:华域联盟 » ASP.NET中XML转JSON的方法实例

转载请保留出处和原文链接:https://www.cnhackhy.com/55087.htm

本文来自网络,不代表华域联盟立场,转载请注明出处。

作者: sterben

发表回复

联系我们

联系我们

2551209778

在线咨询: QQ交谈

邮箱: [email protected]

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部