手机
当前位置:查字典教程网 >编程开发 >asp.net教程 >ASP.NET中XML转JSON的方法实例
ASP.NET中XML转JSON的方法实例
摘要:本文实例讲述了ASP.NET中XML转JSON的方法,分享给大家供大家参考。具体如下:一般在许多应用程序中都将数据存储为XML的格式,而且会...

本文实例讲述了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程序设计有所帮助。

【ASP.NET中XML转JSON的方法实例】相关文章:

ASP.NET 2.0下随机读取Access记录的实现方法

ASP.NET缓存方法分析和实践示例代码第1/2页

ASP.NET 2.0 中的创建母版页

ASP.NET防止页面刷新的两种解决方法

ASP.NET中 Execl导出的六种方法实例

ASP.NET中TreeView用法

ASP.NET中实现模板页

ASP.NET MVC3 实现全站重定向的简单方法

ASP.NET中上传并读取Excel文件数据示例

Asp.NET调用百度翻译的方法

精品推荐
分类导航