Jack-Leung

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

服务器端

LINQ to JSON

获取LINQ to JSON的开源资源,可以访问http://json.codeplex.com/

如果仅使用,可以下载Newtonsoft.Json.dll

在项目中引用Newtonsoft.Json.dll就可以获得LINQ to JSON的能力了。在下面的示例中,我使用到了Northwind数据库,使用LINQ to SQL方式读取所有产品类别数据,创建一个JObject对象:

using (NorthwindDataContext db = new NorthwindDataContext())

{

        JObject json = new JObject( //创建JSON对象

        db.Categories.Select(

            c =>

            new JProperty( //创建JSON属性

                c.CategoryName, //属性名称(在这里是产品类别名称)

                new JArray( //属性的值(在这里是该类别下的所有产品名称)

                    c.Products.Select(

                        p =>

                        p.ProductName

                    )

                )

            )

        )

    );

    ltrJson.Text = json.ToString();

}

上述代码生成的数据结构如下:

“类别名称” : [“产品名称”, “产品名称”, “产品名称”,…]

, “类别名称” : [“产品名称”, “产品名称”, “产品名称”,…]

,……

在前台页面获取ltrJson.Text,然后调用JSON.parse(ltrJson.Text),就可以获取到生成的对象了。

可以看出,LINQ to JSON提供程序支持我们以习惯的LINQ方式读取、创建对象,简化了开发过程,让我们的注意力可以集中在业务流程上。

下面简单地介绍LINQ to JSON中常用的几个类。

LINQ to JSON

JavaScript

描述

JObject

Object

对象

JProperty

string

属性名

JArray

Array

数组

JValue

string,number,object,array,true,false,null

属性的值

使用LINQ to JSON创建的对象,都可以简单地调用ToString方法来获取JSON字符串。此方法有两个重载形式,第一个是无参形式,可以按照默认格式获取JSON字符串;也可以调用有参格式,使用自定义格式来生成JSON字符串。

将字符串转换为JObject对象

在后台程序中可以通过JObject的静态方法Parse将字符串转换为一个JObject对象:

JObject o = JObject.Parse(json);

转换成功后,就可以利用LINQ to JSON的特性来进行相关操作了。

LINQ to JSON中的查询

要使用LINQ to JSON进行查询,就必须要了解它的数据结构:

可以看出,其所有的类都派生于JToken,也就是说所有的LINQ to JSON对象都可以用JToken来表示,即JObject、JProperty还是JArray都可以利用李氏替换原则而用JToken来表示。认清这一点是非常必要的,因为接下来的示例中将多次用到他们之间的类型转换。

遍历一个JToken中所包含的元素,可以使用JTokenObj. Children方法,例如:

using (ProductDataContext db = new ProductDataContext())

{

    JObject json = new JObject( //创建JSON对象

        db.Categories.Select(

            c =>

            new JProperty( //创建JSON属性

                c.CategoryName, //属性名称(在这里是产品类别名称)

                new JArray( //属性的值(在这里是该类别下的所有产品名称)

                    c.Products.Select(

                        p =>

                        p.ProductName

                    )

                )

            )

        )

    );

 

    foreach (JProperty i in json.Children()) //遍历JSON对象的所有属性

    {

        Console.WriteLine("类别为{0}的产品列表", i.Name); //输出属性的名称

        JArray arr = (JArray)i.Value; //获取属性的值(在这里是该类别下的所有产品名称)

        foreach (JValue j in arr) //遍历产品名称集合

        {

            Console.WriteLine(j.Value); //输出产品名称

        }

        Console.WriteLine("-----------------------------------------------------");

    }

上述示例运行后,将输出所有的产品类别,以及属于对应类别的所有产品信息。

http://hi.baidu.com/wmeihan/blog/item/6da5bede03dd2a0b495403f0.html

posted on 2011-07-21 12:58  Jack.leung  阅读(2842)  评论(0编辑  收藏  举报