当前位置: 首页 > 编程笔记 >

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

唐默
2023-03-14
本文向大家介绍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程序设计有所帮助。

 类似资料:
  • 本文向大家介绍JavaScript将XML转成JSON的方法,包括了JavaScript将XML转成JSON的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了JavaScript将XML转成JSON的方法。分享给大家供大家参考。具体方法如下: 1. JavaScript代码如下: 2. XML代码: 3. JSON结果: 关于js操作xml感兴趣的朋友还可参考在线工具: 在线XML/J

  • 本文向大家介绍Python XML转Json之XML2Dict的使用方法,包括了Python XML转Json之XML2Dict的使用方法的使用技巧和注意事项,需要的朋友参考一下 1. Json读写方法 2. xml文件的工具包XML2Dict 将xml转换成Python本地字典对象, 访问子元素和字典常用方法类似,略有不同, 使用 “.” 注: 使用xml2dict库,需要在本地项目添加 xml

  • 本文向大家介绍JSON在ASP.NET中使用方法,包括了JSON在ASP.NET中使用方法的使用技巧和注意事项,需要的朋友参考一下 Json.NET的简单介绍 首先介绍一个为方便在.NET中使用JSON的API,Json.NET。它方便我们读取从浏览器流向服务器的JSON对象,也方便在响应流中写入JSON对象。 Json.NET只提供了服务器端的方法,主要有实现JSON文本与XML互相转换的类,有

  • 问题内容: 有什么好的工具可以在Java中快速轻松地将XML转换为JSON? 问题答案: Java中的 JSON有一些很棒的资源。 Maven依赖项: XML.java 是您要寻找的课程: 输出为:

  • 本文向大家介绍C#实现Json转Unicode的方法,包括了C#实现Json转Unicode的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了C#实现Json转Unicode的方法。分享给大家供大家参考之用。具体方法如下: 本文实例主要实现输入为带有json格式的文本,输出正常文本的功能。 具体代码如下: 希望本文所述对大家的C#程序设计有所帮助

  • 问题内容: 是否有现有的JAR可以将JSON转换为XML? 问题答案: 不是Java,而是 纯XSLT 2.0实现 : 看一看在 从 FXSL 2.x库 。 使用此功能非常容易合并JSon并将其用作XML。 例如,可以只编写以下XPath表达式: 并 让所有的孩子用 这是完整的示例: 当上述转换应用于任何XML文档(忽略)时,将产生正确的结果 :