欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

C#操作 JSON方法汇总

程序员文章站 2023-10-31 14:28:40
restapi中, 经常需要操作json字符串,  需要把json字符串"反序列化"成一个对象, 也需要把一个对象"序列化"成一字符串。 c# 操作json,&...

restapi中, 经常需要操作json字符串,  需要把json字符串"反序列化"成一个对象, 也需要把一个对象"序列化"成一字符串。

c# 操作json,  比较简单。  本文介绍几种方法

步骤

json 字符串 反序列化成对象 共需要2步:

第一步:建立相应的实体类

第二步: 调用方法把json字符串"反序列化"成对象

了解json的语法

首先要了解json的语法,这样才能知道怎么创建实体类.

json 的语法很简单, 就四条

数据在名称/值对中
数据由逗号分隔
花括号保存对象
方括号保存数组

创建实体类的例子

{"firstname":"小坦克","lastname":"tank","age":30}
相应的实体类可以为

  public class person 
  {
    public string firstname
    { get; set; }

    public string lastname
    { get; set; }

    public int age
    { get; set; }
  }

自动生成json的实体类

一个复杂的实体类,我们自己去写的话,可能需要1个小时以上。 那有没有工具能直接生成实体类呢,这样能方便太多了。  当然有

  ----开源的winform工具。

使用第三方工具 newtonsoft.json.dll

优点:  使用非常方便.   看个例子就知道怎么用了

下载地址   //www.jb51.net/dll/newtonsoft.json.dll.html

代码示例:

using system;
using system.collections.generic;
using system.linq;
using system.text;
using newtonsoft.json;

namespace jsondemo
{
  class program
  {
    static void main(string[] args)
    {
      string personjson = "{ 'firstname': '小坦克','lastname':'tank xiao', 'age':'30', 'books':[{'bookname':'c#', 'price':'29.9'},{'bookname':'mac编程', 'price':'39.9'}]}";

      string allmovejson = @"[{ 'firstname': '小坦克','lastname':'tank xiao', 'age':'30', 'books':[{'bookname':'c#', 'price':'29.9'},{'bookname':'mac编程', 'price':'39.9'}]},{
               'firstname': '小坦克2','lastname':'tank xiao2', 'age':'40', 'books':[{'bookname':'c#', 'price':'29.9'},{'bookname':'mac编程', 'price':'39.9'}]}]";

      // 反序列化 单个对象
      person onemovie = jsonconvert.deserializeobject<person>(personjson);

      // 反序列化 对象集合
      list<person> allmovie = jsonconvert.deserializeobject<list<person>>(allmovejson);

      console.writeline(onemovie.firstname);
      console.writeline(allmovie[1].firstname);

      // 序列化
      string afterjson = jsonconvert.serializeobject(allmovie);
    }
  }


  public class person
  {
    public string firstname
    { get; set; }

    public string lastname
    { get; set; }

    public int age
    { get; set; }

    public list<book> books
    { get; set; }
  }

  public class book
  {
    public string bookname
    { get; set; }

    public string price
    { get; set; }
  }
}

最后我们来看个实例

using system;
using system.collections.generic;
using system.text;
using newtonsoft.json;

namespace testjson
{
  class program
  {
    static void main(string[] args)
    {


      string json = "{\"a\":\"sadsad\",\"c\":{\"d\":\"adad\"}}";

      //ccc ccc = new ccc();
      //ccc.d = "adad";

      //aaa aaa = new aaa();
      //aaa.a = "sadsad";
      //aaa.b = "dfgdg";
      //aaa.c = ccc;


      aaa aaa = new aaa();

      aaa= javascriptconvert.deserializeobject<aaa>(json);


      // string json = javascriptconvert.serializeobject(aaa);

      // console.writeline(json);

      console.read();

    }
  }

  public class aaa {

    private string m_a;
    public string a
    {
      get { return m_a; }
      set { m_a = value; }
    }

    private string m_b;
    public string b
    {
      get { return m_b; }
      set { m_b = value; }
    }

    private ccc m_c;
    public ccc c
    {
      get { return m_c; }
      set { m_c = value; }
    }
  }
  public class ccc
  {
    private string m_d;
    public string d
    {
      get { return m_d; }
      set { m_d = value; }
    } 
  }

}