让代码更简单

C#使用Newtonsoft操作json

重要:本文最后更新于2023-05-23 20:03:11,某些文章具有时效性,若有错误或已失效,请在下方留言或联系代码狗

JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,常用于Web应用程序中的数据传输。JSON数据格式是基于JavaScript对象的语法,但是可以使用任何编程语言进行解析和生成。

JSON数据格式的优点包括易于阅读和编写、易于解析和生成、占用空间小、可扩展性好等。

使用Newtonsoft库操作JSON

Newtonsoft库是一个流行的第三方库,用于在.NET应用程序中操作JSON数据。它提供了一组强大的工具,可以轻松地将JSON数据转换为.NET对象,反之亦然。

安装Newtonsoft库

要使用Newtonsoft库,需要先将其安装到项目中。可以通过NuGet包管理器来安装Newtonsoft库。

  1. 打开Visual Studio项目。
  2. 在解决方案资源管理器中,右键单击项目名称,然后选择“管理NuGet程序包”。
  3. 在NuGet包管理器中,搜索“Newtonsoft.Json”。
  4. 选择“Newtonsoft.Json”包,然后点击“安装”。

将JSON数据转换为.NET对象

使用Newtonsoft库,可以将JSON数据转换为.NET对象。下面是一个示例JSON数据:

复制
{
    "name": "John Smith",
    "age": 30,
    "email": "john.smith@example.com",
    "address": {
        "street": "123 Main St",
        "city": "Anytown",
        "state": "CA",
        "zip": "12345"
    },
    "phoneNumbers": [
        {
            "type": "home",
            "number": "555-555-1234"
        },
        {
            "type": "work",
            "number": "555-555-5678"
        }
    ]
}

要将此JSON数据转换为.NET对象,可以使用以下代码:

复制
using Newtonsoft.Json;

// JSON数据
string json = @"{
    'name': 'John Smith',
    'age': 30,
    'email': 'john.smith@example.com',
    'address': {
        'street': '123 Main St',
        'city': 'Anytown',
        'state': 'CA',
        'zip': '12345'
    },
    'phoneNumbers': [
        {
            'type': 'home',
            'number': '555-555-1234'
        },
        {
            'type': 'work',
            'number': '555-555-5678'
        }
    ]
}";

// 将JSON数据转换为.NET对象
dynamic obj = JsonConvert.DeserializeObject(json);

在这个例子中,我们使用JsonConvert.DeserializeObject方法将JSON数据转换为.NET对象。由于JSON数据的结构是动态的,因此我们使用dynamic类型来保存.NET对象。

将.NET对象转换为JSON数据

使用Newtonsoft库,可以将.NET对象转换为JSON数据。下面是一个示例.NET对象:

复制
public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
    public string Email { get; set; }
    public Address Address { get; set; }
    public List<PhoneNumber> PhoneNumbers { get; set; }
}

public class Address
{
    public string Street { get; set; }
    public string City { get; set; }
    public string State { get; set; }
    public string Zip { get; set; }
}

public class PhoneNumber
{
    public string Type { get; set; }
    public string Number { get; set; }
}

要将此.NET对象转换为JSON数据,可以使用以下代码:

复制
using Newtonsoft.Json;

// 创建.NET对象
Person person = new Person
{
    Name = "John Smith",
    Age = 30,
    Email = "john.smith@example.com",
    Address = new Address
    {
        Street = "123 Main St",
        City = "Anytown",
        State = "CA",
        Zip = "12345"
    },
    PhoneNumbers = new List<PhoneNumber>
    {
        new PhoneNumber { Type = "home", Number = "555-555-1234" },
        new PhoneNumber { Type = "work", Number = "555-555-5678" }
    }
};

// 将.NET对象转换为JSON数据
string json = JsonConvert.SerializeObject(person);

在这个例子中,我们使用JsonConvert.SerializeObject方法将.NET对象转换为JSON数据。该方法将.NET对象序列化为JSON字符串。

解析JSON对象

使用Newtonsoft库,可以轻松地解析JSON对象。下面是一个示例JSON对象:

复制
{
    "name": "John Smith",
    "age": 30,
    "email": "john.smith@example.com",
    "address": {
        "street": "123 Main St",
        "city": "Anytown",
        "state": "CA",
        "zip": "12345"
    },
    "phoneNumbers": [
        {
            "type": "home",
            "number": "555-555-1234"
        },
        {
            "type": "work",
            "number": "555-555-5678"
        }
    ]
}

要解析此JSON对象,可以使用以下代码:

复制
using Newtonsoft.Json.Linq;

// JSON对象
string json = @"{
    'name': 'John Smith',
    'age': 30,
    'email': 'john.smith@example.com',
    'address': {
        'street': '123 Main St',
        'city': 'Anytown',
        'state': 'CA',
        'zip': '12345'
    },
    'phoneNumbers': [
        {
            'type': 'home',
            'number': '555-555-1234'
        },
        {
            'type': 'work',
            'number': '555-555-5678'
        }
    ]
}";

// 解析JSON对象
JObject obj = JObject.Parse(json);

// 获取属性值
string name = (string)obj["name"];
int age = (int)obj["age"];
string email = (string)obj["email"];
string street = (string)obj["address"]["street"];
string city = (string)obj["address"]["city"];
string state = (string)obj["address"]["state"];
string zip = (string)obj["address"]["zip"];

// 获取数组元素
var phoneNumbers = from p in obj["phoneNumbers"]
                   select new
                   {
                       Type = (string)p["type"],
                       Number = (string)p["number"]
                   };

在这个例子中,我们使用JObject.Parse方法将JSON对象解析为JObject对象。然后,我们可以使用索引器来获取属性值,也可以使用LINQ查询数组元素。

使用LINQ查询JSON数据

使用Newtonsoft库,可以使用LINQ查询JSON数据。下面是一个示例JSON数据:

复制
{
    "people": [
        {
            "name": "John Smith",
            "age": 30,
            "email": "john.smith@example.com"
        },
        {
            "name": "Jane Doe",
            "age": 25,
            "email": "jane.doe@example.com"
        }
    ]
}

要查询此JSON数据中的人员列表,可以使用以下代码:

复制
using Newtonsoft.Json.Linq;

// JSON数据
string json = @"{
    'people': [
        {
            'name': 'John Smith',
            'age': 30,
            'email': 'john.smith@example.com'
        },
        {
            'name': 'Jane Doe',
            'age': 25,
            'email': 'jane.doe@example.com'
        }
    ]
}";

// 解析JSON数据
JObject obj = JObject.Parse(json);

// 查询人员列表
var people = from p in obj["people"]
             select new
             {
                 Name = (string)p["name"],
                 Age = (int)p["age"],
                 Email = (string)p["email"]
             };

在这个例子中,我们使用JObject.Parse方法将JSON数据解析为JObject对象。然后,我们使用LINQ查询人员列表,并将结果存储在一个匿名类型的集合中。

感觉很棒!可以赞赏支持我哟~

0 打赏

评论 (0)

登录后评论
QQ咨询 邮件咨询 狗哥推荐