Net的介绍与简单实用

2019-05-10 10:00 来源:未知
//Newtonsoft.Json.dll
using Newtonsoft.Json;
using Newtonsoft.Json.Converters;
public static class JConvert
{
    private static IsoDateTimeConverter datetimeimeFormat;
    static JConvert()
    {
        datetimeimeFormat = new IsoDateTimeConverter();
        datetimeimeFormat.DateTimeFormat = "yyyy-MM-dd HH:mm:ss";
    }

    public static string Serialize(object value)
    {
        return  JsonConvert.SerializeObject(value, Formatting.Indented, datetimeimeFormat);
    }

    public static T Deserialize<T>(string value)
    {
        return JsonConvert.DeserializeObject<T>(value);
    }
}

首先我们从Microsoft SQL Server 获取数据到DataTable,也可以给DataTable动态添加行。代码如下:

[csharp]
Productproduct =newProduct(); 
 
 
product.Name ="Apple"; 
product.Expiry =newDateTime(2008, 12, 28); 
product.Price = 3.99M; 
product.Sizes =newstring[] {"Small","Medium","Large"}; 
string json = JavaScriptConvert.SerializeObject(product); 

 

下面开始通过每一种方法实现DataTable转换成 Json 对象。

一、Json.Net是什么? Json.Net是一个读写Json效率比较...

 Newtonsoft.Json(Json.net) 的使用

在web开发中,我们可能会有这样的需求,为了便于前台的JS的处理,我们需要将查询出的数据源格式比如:List<T>、DataTable转换为Json格式。特别在使用Extjs框架的时候,Ajax异步请求的数据格式就是Json。鉴于此,我今天来分享将DataTable 转换成 Json的3种方法。换句话说如何在ASP.NET将一个DataTable序列化为 Json数组。或者如何从一个DataTable返回一个Json字符串。这篇文章将采用StringBuilder,JavaScriptSerializer和 Json.Net DLL (Newtonsoft) 这3种方法实现这一目标。

以下就json常用的方法给大家做一个简单的例子:

using Newtonsoft.Json;

public string DataTableToJsonWithJsonNet(DataTable table) 
   {  
    string JsonString=string.Empty;  
    JsonString = JsonConvert.SerializeObject(table);  
    return JsonString;  
   }

我们知道在.Net中内置了读写Json的对象(DataContractJsonSerializer,JavaScriptSerializer),为什么我们还要用Json.Net呢?

 private DataTable getData()
    {
        DataTable dt = new DataTable();
        dt.Columns.Add("编号", typeof(Int32));
        dt.Columns.Add("姓名", typeof(string));
        dt.Columns.Add("性别", typeof(string));
        dt.Columns.Add("学历", typeof(string));
        dt.Rows.Add(1, "王超", "男", "本科");
        dt.Rows.Add(2, "周丽", "女", "专科");
        dt.Rows.Add(3, "李娟", "女", "专科");
        dt.Rows.Add(4, "杨明", "男", "硕士");
        dt.Rows.Add(5, "张德", "男", "本科");
        return dt;
    }

在性能上:

方法1:使用StringBuilder

 

由于要使用StringBuilder类,我们首先需要导入System.Text命名空间,如下:

在功能上:

这是Json样本数据的样子: {"姓名 ":"张三", "年龄":"30"}。Json里用花括号保存对象,它可以包含多个名称/值对。所以使用StringBuilder我们可以创建一个类似的Json字符串。

其中的output就是一个json字符串,而product是要反序列化的类对象
通过这两个常用的方法,就可以很方便的从json字符串得到对象和从对象得到json字符串

public string DataTableToJson(DataTable table)
    { 
        var JsonString = new StringBuilder();
        if (table.Rows.Count > 0)
        {
            JsonString.Append("[");
            for (int i = 0; i < table.Rows.Count; i  )
            {
                JsonString.Append("{");
                for (int j = 0; j < table.Columns.Count; j  )
                {
                    if (j < table.Columns.Count - 1)
                    {
                        JsonString.Append("""   table.Columns[j].ColumnName.ToString()   "":"   """   table.Rows[i][j].ToString()   "",");
                    }
                    else if (j == table.Columns.Count - 1)
                    {
                        JsonString.Append("""   table.Columns[j].ColumnName.ToString()   "":"   """   table.Rows[i][j].ToString()   """);
                    }
                }
                if (i == table.Rows.Count - 1)
                {
                    JsonString.Append("}");
                }
                else
                {
                    JsonString.Append("},");
                }
            }
            JsonString.Append("]");
        }
        return JsonString.ToString();   
    }

  Json.Net是一个读写Json效率比较高的.Net框架.Json.Net 使得在.Net环境下使用Json更加简单。通过Linq To JSON可以快速的读写Json,通过JsonSerializer可以序列化你的.Net对象。让你轻松实现.Net中所有类型(对象,基本数据类型等)和Json的转换。

using System;
using System.Text;
using System.Data;

public partial class Default2 : System.Web.UI.Page
{
    private string sasss; 

    protected void Page_Load(object sender, EventArgs e)
    {
        DataTable table = getData();
        sasss = DataTableToJson(table);

        Response.Write(sasss   "<br/>");

    }

    public string DataTableToJson(DataTable table)
    { 
        var JsonString = new StringBuilder();
        if (table.Rows.Count > 0)
        {
            JsonString.Append("[");
            for (int i = 0; i < table.Rows.Count; i  )
            {
                JsonString.Append("{");
                for (int j = 0; j < table.Columns.Count; j  )
                {
                    if (j < table.Columns.Count - 1)
                    {
                        JsonString.Append("""   table.Columns[j].ColumnName.ToString()   "":"   """   table.Rows[i][j].ToString()   "",");
                    }
                    else if (j == table.Columns.Count - 1)
                    {
                        JsonString.Append("""   table.Columns[j].ColumnName.ToString()   "":"   """   table.Rows[i][j].ToString()   """);
                    }
                }
                if (i == table.Rows.Count - 1)
                {
                    JsonString.Append("}");
                }
                else
                {
                    JsonString.Append("},");
                }
            }
            JsonString.Append("]");
        }
        return JsonString.ToString();   
    }

    private DataTable getData()
    {
        DataTable dt = new DataTable();
        dt.Columns.Add("编号", typeof(Int32));
        dt.Columns.Add("姓名", typeof(string));
        dt.Columns.Add("性别", typeof(string));
        dt.Columns.Add("学历", typeof(string));
        dt.Rows.Add(1, "王超", "男", "本科");
        dt.Rows.Add(2, "周丽", "女", "专科");
        dt.Rows.Add(3, "李娟", "女", "专科");
        dt.Rows.Add(4, "杨明", "男", "硕士");
        dt.Rows.Add(5, "张德", "男", "本科");
        return dt;
    }
}

特性 Json.Net DataContractJsonSerializer JavaScriptSerializer
Json 支持 支持 支持
Bson 支持 不支持 不支持
Json Schema 支持 不支持 不支持
.Net 2.0 支持 不支持 不支持
.Net 3.5 支持 支持 支持
.Net 4.0 支持 支持 支持
Silverlight 支持 支持 不支持
Windows Phone 支持 支持 不支持
Windows 8 Metro 支持 支持 不支持
Linq to Json 支持 不支持 不支持
Indented Json(有换行格式的Json) 支持 不支持 不支持
Json和XML转换 支持 不支持 不支持
www.weide1946.com,序列化DataTable和DataSet 支持 不支持 不支持
序列化Entity Framework 支持 不支持 不支持

JavaScript Object Notation (Json)是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。这些特性使Json成为理想的数据交换语言。易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。Json采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯,包括C、C 、C#、Java、JavaScript、Perl、Python等等。

 Productproduct =newProduct();

步骤:

product.Name ="Apple";
product.Expiry =newDateTime(2008, 12, 28);
product.Price = 3.99M;
product.Sizes =newstring[] {"Small","Medium","Large"};
string json = JavaScriptConvert.SerializeObject(product);
Newtonsoft.Json.JavaScriptConvert.DeserializeObject:根据json字符串反序列化得到对象。

JavaScriptSerializer这个类是由异步通信层内部使用来序列化和反序列化数据。如果序列化一个对象,就使用序列化方法。反序列化Json字符串,使用Deserialize或DeserializeObject方法。在这里,我们使用序列化方法得到Json格式的数据。代码以下:

 二、为什么使用Json.Net?

StringBuilder方法的全部代码:

本文的前提是你已经熟悉Json,如果您还不知道什么是Json是什么,请自行查看维基百科。

www.weide1946.com 1

JavaScriptConvert.SerializeObject:将对象转换为josn字符串

这个方法中要添加Json.Net DLL引用,我们可以从Newtonsoft下载Json.Net DLL,再导入命名空间,代码如下:

三、简单实例

方法2:使用 JavaScriptSerializer.

ProductdeserializedProduct = (Product)JavaScriptConvert.DeserializeObject(output,typeof(Product));

 有兴趣可以试一下,希望对你有帮助。觉得不错就推荐一下吧,谢谢浏览!

 

  效果图:

一、Json.Net是什么?

方法3:使用Json.Net DLL (Newtonsoft)。

Json概述

using System.Text; 

 

这些特性使Json成为一种理想的数据交换语言。因此 基于AJAX应用程序,Json已经成为一种用于数据交换的流行格式。总之,Json是一种存储和交换数据的语法,易于操作,也是除XML之外的不二之选。

下面的代码将生成一个Json字符串,遍历DataTable的行和列,获取数据,添加到一个StringBuilder对象 JsonString,然后返回这个对象。

首先我们添加System.Web.Script.Serialization命名空间,如下:

using System.Web.Script.Serialization;  
 public string DataTableToJsonWithJavaScriptSerializer(DataTable table) 
    {  
        JavaScriptSerializer jsSerializer = new JavaScriptSerializer();  
        List < Dictionary < string, object >> parentRow = new List < Dictionary < string, object >> ();  
        Dictionary < string, object > childRow;  
        foreach(DataRow row in table.Rows) 
        {  
            childRow = new Dictionary < string, object > ();  
            foreach(DataColumn col in table.Columns) 
            {  
                childRow.Add(col.ColumnName, row[col]);  
            }  
            parentRow.Add(childRow);  
        }  
        return jsSerializer.Serialize(parentRow);  
    }   
版权声明:本文由韦德娱乐1946_韦德娱乐1946网页版|韦德国际1946官网发布于网络编程,转载请注明出处:Net的介绍与简单实用