来自 电脑系统 2019-11-28 05:52 的文章
当前位置: 金沙澳门官网网址 > 电脑系统 > 正文

输出到前端JSON的几种方法

          

  恐怕还恐怕有越多的主意,这里不风流洒脱一列出了。那么怎样行使原生的C#代码将XML转变到JSON格式字符串呢?或然说该C#代码在异常低版本的.NET Framework中也足以运转吧?来拜谒下边包车型大巴介绍吧。

 

Code Description

 ArrayList eventList = new ArrayList();

     Hashtable hx = new Hashtable();
     hx.Add("eventid", 1);
          hx.Add("eventname", "圣诞节");
       hx.Add("eventdate", "2018-08-25");
       hx.Add("eventlocation", "公司会议中心");

       for (int i = 0; i < 3; i++)
      {
      Hashtable ht = new Hashtable();
      ht.Add("eventid", i + 1);
      ht.Add("eventname", "圣诞节");
      ht.Add("eventdate", hx);
      ht.Add("eventlocation", "公司会议中心");
      eventList.Add(ht);
     }
    JavaScriptSerializer ser = new JavaScriptSerializer();
    String jsonStr = ser.Serialize(eventList);
    Response.Write(jsonStr);

  首先要求保险您的工程或服务器扶植.NET 4.0或以上版本的Framework,不然无法找到此类。

    

  本文旨在介绍假诺经过C#将赢得到的XML文书档案转产生对应的JSON格式字符串,然后将其出口到页日前端,以供JavaScript代码深入剖判采纳。可能你能够直接选择JavaScript代码通过Ajax的方式来读取XML,然后直接对中间的源委举办深入分析,那样大概更直白一些。但本文中提交的代码目的在于认证怎样通过原生的C#代码来产生那意气风发退换。除了那么些之外,你照样能够借用一些第三方类库或许更加尖端部分的.NET库对象来实行转换。大家来会见这里介绍的一些较为轻易的法子,但前提是你不得不有所可支撑的类库和对象以备使用。

 第种种:利用array数组和hashtable拼成JSON格式,转成JSON在后面一个输出:

  其出口结果为:{"key1":"True","key2":"Hello World","key3":"999"}

第二种:利用table拼成JSON数据格式,再用JSON.NET转成JSON输出到前端:

  上面给出对应的C#源代码,通过传播的XmlDocument对象将其转移为对应的JSON格式字符串。

 

protected void Page_Load(object sender, EventArgs e)
{
    XmlDocument doc = new XmlDocument();
    try
    {
        string path = Server.MapPath(".");
        doc.Load(path+"whatever.xml");
    }
    catch (Exception ex)
    {
        lblError.Text = ex.ToString();
        return;
    }

    // Convert XML to a JSON string
    string JSON = XmlToJSON(doc);

    // Replace  with \ because string is being decoded twice
    JSON = JSON.Replace(@"", @"\");

    // Insert code to process JSON at end of page
    ClientScriptManager cs = Page.ClientScript;
    cs.RegisterStartupScript(GetType(), "SpaceJSON", "space_processJSON('" + JSON + "');", true);
}

其二种:用JSON.net自带的JOBJECT,拼成JSON格式,转成JSON在前端输出:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Xml;
using Newtonsoft.Json;

namespace JSonConverter
{
    class Program
    {
        static void Main(string[] args)
        {
            string xml = "<Test><Name>Test class</Name><X>100</X><Y>200</Y></Test>";

            XmlDocument doc = new XmlDocument();
            doc.LoadXml(xml);
            string json = Newtonsoft.Json.JsonConvert.SerializeXmlNode(doc);

            Console.WriteLine("XML -> JSON: {0}", json);
            Console.ReadLine();

        }
    }
}
JObject obj = new JObject();
    obj.Add(new JProperty("Status", "S"));
    obj.Add(new JProperty("TotalCount", totalCount));
    JArray array = new JArray();
    if (result != null)
    {
    foreach (var item in result)
    {    
    array.Add(
    new JObject(
    new JProperty("X", item.X)
    , new JProperty(" XX", item.XX)
    , new JProperty("XXX", item.XXX)
    , new JProperty("Xxxxx", item.XXXX)
    , new JProperty("xxxxxxx", item.XXXXX)
    , new JProperty("xxxxxxxxx", item.XXXXXX)
    , new JProperty("xxxxxxxxxxx", item.XXXXXXX)
    , new JProperty("xxxxxxxxxxxxx", item.XXXXXXXX)
    , new JProperty("xxxxxxxxxxxxxxxxx", item.XXXXXXXXX)
    , new JProperty("xxxxxxxxxxxxxxxxxxxx", item.XXXXXXXXXX)
    , new JProperty("xxxxxxxxxxxxxxxxxxxxxxx", item.XXXXXXXXXXX)));
    }
    obj.Add(new JProperty("WorkOrderManagerList", array));
    Response.Write(JsonConvert.SerializeObject(obj));

  来看看前端页面上定义的那一个JavaScript函数的具体内容。

  dt = new DataTable();

            dt.Columns.Add(new DataColumn("列头",typeof(string)));
            dt.Columns.Add(new DataColumn("object", typeof(object)));

            DataRow dr = dt.NewRow();
            dr[0] = "abc";

            DataTable dt2 = dt.Clone();
            dt2.Columns.Add("defaultdata", typeof(string));
            DataRow dr2 = dt2.NewRow();
            dr2[0] = "defgijk";
            dr2["defaultdata"] = "cccc";
            dt2.Rows.Add(dr2);

            dr[1] = dt2;

            dt.Rows.Add(dr);

            GridView1.DataSource = dt.Rows[0][1];
            GridView1.DataBind();

            Label1.Text = JsonConvert.SerializeObject(dt);

XML输入:

 

  • space_DOM.space.name
  • space_DOM.space.frame.length
  • space_DOM.space.frame[0].text.string
  • space_DOM.space.frame[0].rule[0].type

第蓬蓬勃勃种:利用MODEL拼成要出口JSON的对象。再用JSON.NET转成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();
}

    

  上边是一个例证:

  前提是内需首先下载和装置Json.NET类库,在这里边能够找到

  原版的书文出处:《How to convert XML to JSON in ASP.NET C#》

  你的JavaScript代码应该能够极其灵活地应对各类情况,如成员不设有、成员只包括value、或成员是三个数组。下边那么些函数能够将所有的分子转变到二个数组,进而回答各样分裂的图景。

Using XmlToJSON

  代码中提供了叁个艺术XmlToJSON,能够用来将XmlDocument对象调换为JSON字符串。代码通过迭代每多少个XML节点、属性以至子节点,来创立对应的JSON对象。

  • 代码不会变卦数字和布尔类型的值
  • Xml DocumentElement对象始终会被转移为JSON对象的member:object,它固守上边那些法则。
  • 节点的性质会被对应地改动为JSON对象的分子"attr_name":"attr_value"。如:

    XML JSON
    <xx yy='nn'></xx> { "xx" : { "yy" : "nn" } }
    <xx yy=''></xx> { "xx" : { "yy" : "" } }
  • 从未子节点、属性和剧情的节点被改动为成员"child_name":null

    XML JSON
    <xx/> { "xx" : null }
  • 尚无子节点和质量,不过有内容的节点被改变为成员"child_name":"child_金沙澳门官网网址 ,text"

    XML JSON
    <xx>yyy</xx> { "xx" : "yyy" }
  • 别的节点和属性会被刚好地改动为"child_name":对象恐怕"child_name":[elements]指标数组,节点的值会被调换为对象成员的"value",如:

    XML JSON
    <xx yy='nn'><mm>zzz</mm></xx> { "xx" : { "yy" : "nn", "mm" : "zzz" } }
    <xx yy='nn'><mm>zzz</mm><mm>aaa</mm></xx> { "xx" : { "yy" : "nn", "mm" : [ "zzz", "aaa" ] } }
    <xx><mm>zzz</mm>some text</xx> { "xx" : { "mm" : "zzz", "value" : "some text" } }
    <xx value='yyy'>some text<mm>zzz</mm>more text</xx> { "xx" : { "mm" : "zzz", "value" : [ "yyy", "some text", "more text" ] } }
  • 字符会被安全地转移为JSON字符串。注意该调换不会保障你的JavaScript代码不会遭到任何注入攻击,借使内部的内容来自于生龙活虎段不安全的XML数据源的话。下边那一个例子演示了字符的转义:

    XML JSON
    <aa>/z'z''zyyy</aa> { "aa" : "/zu0027z''z\yyy" }

Introduction

本文由金沙澳门官网网址发布于电脑系统,转载请注明出处:输出到前端JSON的几种方法

关键词: