【c#/JSON】将给定的JSON数据转化为集合,并显示在前台

练习如下:手上有一串JSON数据,我需要将它转化为集合,同时也要发送到前台进行浏览。

——————————————————————————————————————————————

前提:

首先在项目中创建一个JSON文件,具体的json数据放到博客最后。

因为使用的是c#,在使用前需要引用对应的dll:Newtonsoft.Json官网地址,也可以通过NuGet的方式直接PM下载:

PM> Install-Package Newtonsoft.Json

成功后就可以引用对应的dll库:

using Newtonsoft.Json;
或者
using Newtonsoft.Json.Linq;
//注意这两种在使用时有所区别,下文提到。

——————————————————————————————————————————

将JSON转泛型集合:

在后台直接转化为泛型集合列表——List<T>

因为我们要把JSON转化为List<T>,所以自然要建立一个对应的类来表示JSON中的对象。

一个简便的办法是复制JSON数据后直接【编辑】-》【选择性粘贴】-》【将JSON粘贴为类】(类似的也有将xml粘贴为类的方法)。

 

注意这样生成的类,最外层是Rootobject,不一定要使用,看需要删去。

 

我们将下述json数据(文末)定义成了这样的类:

public class stuTable {
   public string Name { get; set; }
    //方式一:
   public List<Student> Students { get; set; }
    //方式二
    public Student[] Students{ get; set; }
}

public class Student
{
    public string Name { get; set; }
    public string Gender { get; set; }
    public string Age { get; set; }
}

注意,因为JSON数据是【数组--对象--键值对/键值(数组对象)】的形式,因此我们定义的对象类中需要一个里层的泛型集合列表(或者是数组对象)。同时也要注意给出public的访问权限,因为public class默认类内权限是private。

在C++中用class定义的类中,其成员的默认存取权限是private;
在C++中用struct定义的结构体中,其成员的默认存取权限是public;

另外,struct定义的结构体是值类型,效果与类相似。

减少了托管堆的负担,适用于较小的对象。

类创建好后我们就要去读取它。

因为json为本地文件,我们需要本地访问它,同时防止访问空对象,我们需要添加异常处理

//添加IO的库
using System.IO;
…………………………
try
{
    Encoding encoding = Encoding.Default;
    String url = "/01work/控制台AllTest/控制台AllTest/json1.json";
    StreamReader SR = new StreamReader(url);
    String content = SR.ReadToEnd();
    SR.Dispose();

    /*
    *转换代码区
    */

    Console.Write("结果一:纯文件读取:"+content);
    Console.Read();
}
catch (Exception e)
{
    Console.WriteLine(e);
    throw;
}

这个时候,我们将JOSN文件读取出来,并以字符串的方式储存在content中,读取后及时释放TextReader的资源

 

现在读取到了,类也有了,引用的Newtonsoft.Json库也有了,自然就该转换了。

两种转换方式:

using Newtonsoft.Json;
//注意两种方式引用库文件的不同
————————————————————
//在上述的转换代码区添加
List<stuTable> stuTables = JsonConvert.DeserializeObject<List<stuTable>>(content);

上面这种是直接用JsonConvert方法。

using Newtonsoft.Json.Linq;
//注意两种方式引用库文件的不同
————————————————————
//在上述的代码区添加
  
JArray jArray = JArray.Parse(content);
List<stuTable> stuTables = new List<stuTable>();
stuTables = jArray.ToObject<List<stuTable>>();

上面这种方式是先转换为JArray,然后再转换为List<>泛型集合列表。

JArray似乎和LINQ有关,我目前还没接触过LINQ,未来将对此进行了解。

 

上述两种方式的结果:(直接通过断点运行查看结果)

因为不能截图,无法上结果,但是如果顺利的话,通过断点可以查看到json数据已经转换到集合中了。

——————————————————————————————————————————

后台发给客

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值