ASP.NET中XML转JSON的方法

简介: 原文:ASP.NET中XML转JSON的方法许多应用程序都将数据存储为XML的格式,而且会将数据以JSON的格式发送到客户端以做进一步处理。要实现这一点,它们必须将XML格式转换为JSON格式。     XML转JSON代码   [csharp] view plaincopy ...
原文: ASP.NET中XML转JSON的方法

许多应用程序都将数据存储为XML的格式,而且会将数据以JSON的格式发送到客户端以做进一步处理。要实现这一点,它们必须将XML格式转换为JSON格式。

 

 

XML转JSON代码

 

[csharp]  view plain copy 在CODE上查看代码片 派生到我的代码片
 
  1. private static string XmlToJSON(XmlDocument xmlDoc)  
  2. {  
  3.     StringBuilder sbJSON = new StringBuilder();  
  4.     sbJSON.Append("{ ");  
  5.     XmlToJSONnode(sbJSON, xmlDoc.DocumentElement, true);  
  6.     sbJSON.Append("}");  
  7.     return sbJSON.ToString();  
  8. }  
  9.   
  10. //  XmlToJSONnode:  Output an XmlElement, possibly as part of a higher array  
  11. private static void XmlToJSONnode(StringBuilder sbJSON, XmlElement node, bool showNodeName)  
  12. {  
  13.     if (showNodeName)  
  14.         sbJSON.Append("\\"" + SafeJSON(node.Name) + "\\": ");  
  15.     sbJSON.Append("{");  
  16.     // Build a sorted list of key-value pairs  
  17.     //  where   key is case-sensitive nodeName  
  18.     //          value is an ArrayList of string or XmlElement  
  19.     //  so that we know whether the nodeName is an array or not.  
  20.     SortedList childNodeNames = new SortedList();  
  21.   
  22.     //  Add in all node attributes  
  23.     if( node.Attributes!=null)  
  24.         foreach (XmlAttribute attr in node.Attributes)  
  25.             StoreChildNode(childNodeNames,attr.Name,attr.InnerText);  
  26.   
  27.     //  Add in all nodes  
  28.     foreach (XmlNode cnode in node.ChildNodes)  
  29.     {  
  30.         if (cnode is XmlText)  
  31.             StoreChildNode(childNodeNames, "value", cnode.InnerText);  
  32.         else if (cnode is XmlElement)  
  33.             StoreChildNode(childNodeNames, cnode.Name, cnode);  
  34.     }  
  35.   
  36.     // Now output all stored info  
  37.     foreach (string childname in childNodeNames.Keys)  
  38.     {  
  39.         ArrayList alChild = (ArrayList)childNodeNames[childname];  
  40.         if (alChild.Count == 1)  
  41.             OutputNode(childname, alChild[0], sbJSON, true);  
  42.         else  
  43.         {  
  44.             sbJSON.Append(" \\"" + SafeJSON(childname) + "\\": [ ");  
  45.             foreach (object Child in alChild)  
  46.                 OutputNode(childname, Child, sbJSON, false);  
  47.             sbJSON.Remove(sbJSON.Length - 2, 2);  
  48.             sbJSON.Append(" ], ");  
  49.         }  
  50.     }  
  51.     sbJSON.Remove(sbJSON.Length - 2, 2);  
  52.     sbJSON.Append(" }");  
  53. }  
  54.   
  55. //  StoreChildNode: Store data associated with each nodeName  
  56. //                  so that we know whether the nodeName is an array or not.  
  57. private static void StoreChildNode(SortedList childNodeNames, string nodeName, object nodeValue)  
  58. {  
  59.     // Pre-process contraction of XmlElement-s  
  60.     if (nodeValue is XmlElement)  
  61.     {  
  62.         // Convert  <aa></aa> into "aa":null  
  63.         //          <aa>xx</aa> into "aa":"xx"  
  64.         XmlNode cnode = (XmlNode)nodeValue;  
  65.         if( cnode.Attributes.Count == 0)  
  66.         {  
  67.             XmlNodeList children = cnode.ChildNodes;  
  68.             if( children.Count==0)  
  69.                 nodeValue = null;  
  70.             else if (children.Count == 1 && (children[0] is XmlText))  
  71.                 nodeValue = ((XmlText)(children[0])).InnerText;  
  72.         }  
  73.     }  
  74.     // Add nodeValue to ArrayList associated with each nodeName  
  75.     // If nodeName doesn't exist then add it  
  76.     object oValuesAL = childNodeNames[nodeName];  
  77.     ArrayList ValuesAL;  
  78.     if (oValuesAL == null)  
  79.     {  
  80.         ValuesAL = new ArrayList();  
  81.         childNodeNames[nodeName] = ValuesAL;  
  82.     }  
  83.     else  
  84.         ValuesAL = (ArrayList)oValuesAL;  
  85.     ValuesAL.Add(nodeValue);  
  86. }  
  87.   
  88. private static void OutputNode(string childname, object alChild, StringBuilder sbJSON, bool showNodeName)  
  89. {  
  90.     if (alChild == null)  
  91.     {  
  92.         if (showNodeName)  
  93.             sbJSON.Append("\\"" + SafeJSON(childname) + "\\": ");  
  94.         sbJSON.Append("null");  
  95.     }  
  96.     else if (alChild is string)  
  97.     {  
  98.         if (showNodeName)  
  99.             sbJSON.Append("\\"" + SafeJSON(childname) + "\\": ");  
  100.         string sChild = (string)alChild;  
  101.         sChild = sChild.Trim();  
  102.         sbJSON.Append("\\"" + SafeJSON(sChild) + "\\"");  
  103.     }  
  104.     else  
  105.         XmlToJSONnode(sbJSON, (XmlElement)alChild, showNodeName);  
  106.     sbJSON.Append(", ");  
  107. }  
  108.   
  109. // Make a string safe for JSON  
  110. private static string SafeJSON(string sIn)  
  111. {  
  112.     StringBuilder sbOut = new StringBuilder(sIn.Length);  
  113.     foreach (char ch in sIn)  
  114.     {  
  115.         if (Char.IsControl(ch) || ch == '\\'')  
  116.         {  
  117.             int ich = (int)ch;  
  118.             sbOut.Append(@"\\u" + ich.ToString("x4"));  
  119.             continue;  
  120.         }  
  121.         else if (ch == '\\"' || ch == '\\\\' || ch == '/')  
  122.         {  
  123.             sbOut.Append('\\\\');  
  124.         }  
  125.         sbOut.Append(ch);  
  126.     }  
  127.     return sbOut.ToString();  
  128. }  
目录
相关文章
|
11天前
|
XML 存储 JSON
Twaver-HTML5基础学习(19)数据容器(2)_数据序列化_XML、Json
本文介绍了Twaver HTML5中的数据序列化,包括XML和JSON格式的序列化与反序列化方法。文章通过示例代码展示了如何将DataBox中的数据序列化为XML和JSON字符串,以及如何从这些字符串中反序列化数据,重建DataBox中的对象。此外,还提到了用户自定义属性的序列化注册方法。
27 1
|
2月前
|
XML JSON 前端开发
【Web前端揭秘】XML与JSON:数据界的双雄对决,你的选择将如何改写Web世界的未来?
【8月更文挑战第26天】本文深入探讨了XML和JSON这两种广泛使用的数据交换格式在Web前端开发中的应用。XML采用自定义标签描述数据结构,适用于复杂层次数据的表示,而JSON则以键值对形式呈现数据,更为轻量且易解析。通过对两种格式的示例代码、结构特点及应用场景的分析,本文旨在帮助读者更好地理解它们的差异,并根据实际需求选择最合适的数据交换格式。
49 1
|
11天前
|
XML JSON 数据处理
C# 中的 XML 与 JSON 数据处理
在现代软件开发中,数据交换和存储需求日益增长,XML 和 JSON 成为最常用的数据格式。本文从 C# 角度出发,详细介绍如何处理这两种格式,并提供示例代码。对于 XML,我们介绍了读取、创建和写入 XML 文件的方法;对于 JSON,则展示了如何使用 Newtonsoft.Json 库进行数据解析和序列化。此外,文章还总结了常见问题及其解决方案,帮助开发者更好地应对实际项目中的挑战。
156 61
C# 中的 XML 与 JSON 数据处理
|
2月前
|
SQL 缓存 开发框架
分享一个 .NET EF6 应用二级缓存提高性能的方法
分享一个 .NET EF6 应用二级缓存提高性能的方法
|
8天前
|
XML JSON JavaScript
JSON对象的stringify()和parse()方法使用
本文阐述了JSON对象的`stringify()`和`parse()`方法的用法,包括如何将JavaScript对象转换为JSON字符串,以及如何将JSON字符串解析回JavaScript对象,并讨论了转换过程中需要注意的事项。
JSON对象的stringify()和parse()方法使用
|
2月前
|
存储 JSON JavaScript
|
2月前
|
XML JSON Java
使用IDEA+Maven搭建整合一个Struts2+Spring4+Hibernate4项目,混合使用传统Xml与@注解,返回JSP视图或JSON数据,快来给你的SSH老项目翻新一下吧
本文介绍了如何使用IntelliJ IDEA和Maven搭建一个整合了Struts2、Spring4、Hibernate4的J2EE项目,并配置了项目目录结构、web.xml、welcome.jsp以及多个JSP页面,用于刷新和学习传统的SSH框架。
36 0
使用IDEA+Maven搭建整合一个Struts2+Spring4+Hibernate4项目,混合使用传统Xml与@注解,返回JSP视图或JSON数据,快来给你的SSH老项目翻新一下吧
|
2月前
|
Java Spring 容器
彻底改变你的编程人生!揭秘 Spring 框架依赖注入的神奇魔力,让你的代码瞬间焕然一新!
【8月更文挑战第31天】本文介绍 Spring 框架中的依赖注入(DI),一种降低代码耦合度的设计模式。通过 Spring 的 DI 容器,开发者可专注业务逻辑而非依赖管理。文中详细解释了 DI 的基本概念及其实现方式,如构造器注入、字段注入与 setter 方法注入,并提供示例说明如何在实际项目中应用这些技术。通过 Spring 的 @Configuration 和 @Bean 注解,可轻松定义与管理应用中的组件及其依赖关系,实现更简洁、易维护的代码结构。
35 0
|
2月前
|
程序员 数据库
分享 2 个 .NET EF 6 只更新某些字段的方法
分享 2 个 .NET EF 6 只更新某些字段的方法
|
2月前
|
数据库
分享一个 .NET EF 6 扩展 Where 的方法
分享一个 .NET EF 6 扩展 Where 的方法