·您现在的位置: 云翼网络 >> 文章中心 >> 网站建设 >> 网站建设开发 >> ASP.NET网站开发 >> ASP.NET中XML转JSON的方法

ASP.NET中XML转JSON的方法

作者:佚名      ASP.NET网站开发编辑:admin      更新时间:2022-07-23

asp.net中xml转JSON的方法

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

XML转JSON代码

[csharp]view plaincopy在CODE上查看代码片派生到我的代码片
  1. PRivatestaticstringXmlToJSON(XmlDocumentxmlDoc)
  2. {
  3. StringBuildersbJSON=newStringBuilder();
  4. sbJSON.Append("{");
  5. XmlToJSONnode(sbJSON,xmlDoc.DocumentElement,true);
  6. sbJSON.Append("}");
  7. returnsbJSON.ToString();
  8. }
  9. //XmlToJSONnode:OutputanXmlElement,possiblyaspartofahigherarray
  10. privatestaticvoidXmlToJSONnode(StringBuildersbJSON,XmlElementnode,boolshowNodeName)
  11. {
  12. if(showNodeName)
  13. sbJSON.Append("\\""+SafeJSON(node.Name)+"\\":");
  14. sbJSON.Append("{");
  15. //Buildasortedlistofkey-valuepairs
  16. //wherekeyiscase-sensitivenodeName
  17. //valueisanArrayListofstringorXmlElement
  18. //sothatweknowwhetherthenodeNameisanarrayornot.
  19. SortedListchildNodeNames=newSortedList();
  20. //Addinallnodeattributes
  21. if(node.Attributes!=null)
  22. foreach(XmlAttributeattrinnode.Attributes)
  23. StoreChildNode(childNodeNames,attr.Name,attr.InnerText);
  24. //Addinallnodes
  25. foreach(XmlNodecnodeinnode.ChildNodes)
  26. {
  27. if(cnodeisXmlText)
  28. StoreChildNode(childNodeNames,"value",cnode.InnerText);
  29. elseif(cnodeisXmlElement)
  30. StoreChildNode(childNodeNames,cnode.Name,cnode);
  31. }
  32. //Nowoutputallstoredinfo
  33. foreach(stringchildnameinchildNodeNames.Keys)
  34. {
  35. ArrayListalChild=(ArrayList)childNodeNames[childname];
  36. if(alChild.Count==1)
  37. OutputNode(childname,alChild[0],sbJSON,true);
  38. else
  39. {
  40. sbJSON.Append("\\""+SafeJSON(childname)+"\\":[");
  41. foreach(objectChildinalChild)
  42. OutputNode(childname,Child,sbJSON,false);
  43. sbJSON.Remove(sbJSON.Length-2,2);
  44. sbJSON.Append("],");
  45. }
  46. }
  47. sbJSON.Remove(sbJSON.Length-2,2);
  48. sbJSON.Append("}");
  49. }
  50. //StoreChildNode:StoredataassociatedwitheachnodeName
  51. //sothatweknowwhetherthenodeNameisanarrayornot.
  52. privatestaticvoidStoreChildNode(SortedListchildNodeNames,stringnodeName,objectnodeValue)
  53. {
  54. //Pre-processcontractionofXmlElement-s
  55. if(nodeValueisXmlElement)
  56. {
  57. //Convert<aa></aa>into"aa":null
  58. //<aa>xx</aa>into"aa":"xx"
  59. XmlNodecnode=(XmlNode)nodeValue;
  60. if(cnode.Attributes.Count==0)
  61. {
  62. XmlNodeListchildren=cnode.ChildNodes;
  63. if(children.Count==0)
  64. nodeValue=null;
  65. elseif(children.Count==1&&(children[0]isXmlText))
  66. nodeValue=((XmlText)(children[0])).InnerText;
  67. }
  68. }
  69. //AddnodeValuetoArrayListassociatedwitheachnodeName
  70. //IfnodeNamedoesn'texistthenaddit
  71. objectoValuesAL=childNodeNames[nodeName];
  72. ArrayListValuesAL;
  73. if(oValuesAL==null)
  74. {
  75. ValuesAL=newArrayList();
  76. childNodeNames[nodeName]=ValuesAL;
  77. }
  78. else
  79. ValuesAL=(ArrayList)oValuesAL;
  80. ValuesAL.Add(nodeValue);
  81. }
  82. privatestaticvoidOutputNode(stringchildname,objectalChild,StringBuildersbJSON,boolshowNodeName)
  83. {
  84. if(alChild==null)
  85. {
  86. if(showNodeName)
  87. sbJSON.Append("\\""+SafeJSON(childname)+"\\":");
  88. sbJSON.Append("null");
  89. }
  90. elseif(alChildisstring)
  91. {
  92. if(showNodeName)
  93. sbJSON.Append("\\""+SafeJSON(childname)+"\\":");
  94. stringsChild=(string)alChild;
  95. sChild=sChild.Trim();
  96. sbJSON.Append("\\""+SafeJSON(sChild)+"\\"");
  97. }
  98. else
  99. XmlToJSONnode(sbJSON,(XmlElement)alChild,showNodeName);
  100. sbJSON.Append(",");
  101. }
  102. //MakeastringsafeforJSON
  103. privatestaticstringSafeJSON(stringsIn)
  104. {
  105. StringBuildersbOut=newStringBuilder(sIn.Length);
  106. foreach(charchinsIn)
  107. {
  108. if(Char.IsControl(ch)||ch=='\\'')
  109. {
  110. intich=(int)ch;
  111. sbOut.Append(@"\\u"+ich.ToString("x4"));
  112. continue;
  113. }
  114. elseif(ch=='\\"'||ch=='\\\\'||ch=='/')
  115. {
  116. sbOut.Append('\\\\');
  117. }
  118. sbOut.Append(ch);
  119. }
  120. returnsbOut.ToString();
  121. }