下面是“C#基于JsonConvert解析Json数据的方法实例”完整攻略,包括了Json的基本概念、JsonConvert工具的使用、示例代码等。
什么是Json
Json(JavaScript Object Notation)是一种轻量级的数据交换格式,广泛应用于Web应用程序之间的数据交互。它基于JavaScript语法,但与JavaScript语言无关,因此可以用于许多不同的编程语言。Json以键值对(key-value)的方式存储数据,使用简单、易于阅读和编写。
使用JsonConvert解析Json数据
在C#中,可以使用JsonConvert工具解析Json数据,该工具可通过NuGet包管理器安装。下面是基于JsonConvert解析Json数据的方法:
- 安装JsonConvert
首先,需要安装Newtonsoft.Json NuGet包,方法如下:
PM> Install-Package Newtonsoft.Json
- 创建Json字符串
接下来,需要构造一个Json字符串,作为解析的例子。示例如下:
{
"name" : "Tom",
"age" : 20,
"account" : {
"id" : "123456789",
"balance" : 1000.25
},
"addresses" : [
{
"street" : "123 Main St.",
"city" : "New York",
"state" : "NY",
"zip" : "10001"
},
{
"street" : "456 Lincoln Blvd.",
"city" : "Los Angeles",
"state" : "CA",
"zip" : "90012"
}
]
}
- 解析Json字符串
使用JsonConvert工具解析Json字符串的方法如下:
using Newtonsoft.Json;
using System;
namespace MyNamespace
{
class Program
{
static void Main(string[] args)
{
string json = "{\"name\":\"Tom\",\"age\":20,\"account\":{\"id\":\"123456789\",\"balance\":1000.25},\"addresses\":[{\"street\":\"123 Main St.\",\"city\":\"New York\",\"state\":\"NY\",\"zip\":\"10001\"},{\"street\":\"456 Lincoln Blvd.\",\"city\":\"Los Angeles\",\"state\":\"CA\",\"zip\":\"90012\"}]}";
dynamic data = JsonConvert.DeserializeObject(json);
Console.WriteLine(data.name);
Console.WriteLine(data.age);
Console.WriteLine(data.account.id);
Console.WriteLine(data.account.balance);
foreach (dynamic address in data.addresses)
{
Console.WriteLine(address.street);
Console.WriteLine(address.city);
Console.WriteLine(address.state);
Console.WriteLine(address.zip);
}
}
}
}
在这个示例中,JsonConvert.DeserializeObject()方法将Json字符串解析为动态对象,然后可以使用这个对象来访问Json数据的属性。解析后的动态对象的类型是JObject,但它可以自动转换为.NET类型(例如string、int、double、List,甚至自定义类)。
- 解析Json字符串为指定类型
除了将Json字符串解析为动态对象,还可以将其解析为指定类型的对象。示例代码如下:
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
namespace MyNamespace
{
class Program
{
static void Main(string[] args)
{
string json = "{\"name\":\"Tom\",\"age\":20,\"account\":{\"id\":\"123456789\",\"balance\":1000.25},\"addresses\":[{\"street\":\"123 Main St.\",\"city\":\"New York\",\"state\":\"NY\",\"zip\":\"10001\"},{\"street\":\"456 Lincoln Blvd.\",\"city\":\"Los Angeles\",\"state\":\"CA\",\"zip\":\"90012\"}]}";
Person person = JsonConvert.DeserializeObject<Person>(json);
Console.WriteLine(person.Name);
Console.WriteLine(person.Age);
Console.WriteLine(person.Account.Id);
Console.WriteLine(person.Account.Balance);
foreach (Address address in person.Addresses)
{
Console.WriteLine(address.Street);
Console.WriteLine(address.City);
Console.WriteLine(address.State);
Console.WriteLine(address.Zip);
}
}
}
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public Account Account { get; set; }
public List<Address> Addresses { get; set; }
}
public class Account
{
public string Id { get; set; }
public double Balance { 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; }
}
}
在这个示例中,JsonConvert.DeserializeObject()方法将Json字符串解析为Person类的实例,Person类包含了Json字符串中的所有属性和类型。在这个示例中,Person类中包含一个Account对象和一个Address对象列表。在使用这种方法时,需要确保Json字符串中的所有属性都在目标类中定义,否则会引发异常。
示例
下面提供两个示例,分别演示了基于JsonConvert解析Json数据的方法和从网络上获取Json数据并解析。
示例1:解析本地Json文件
例如,有一个名为“person.json”的本地Json文件,内容如下:
{
"name": "Tom",
"age": 20,
"address": {
"street": "123 Main St.",
"city": "New York",
"state": "NY"
}
}
可以使用以下代码将其解析为Person对象:
using Newtonsoft.Json;
using System;
using System.IO;
namespace MyNamespace
{
class Program
{
static void Main(string[] args)
{
string json = File.ReadAllText("person.json");
Person person = JsonConvert.DeserializeObject<Person>(json);
Console.WriteLine(person.Name);
Console.WriteLine(person.Age);
Console.WriteLine(person.Address.Street);
Console.WriteLine(person.Address.City);
Console.WriteLine(person.Address.State);
}
}
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
public Address Address { get; set; }
}
public class Address
{
public string Street { get; set; }
public string City { get; set; }
public string State { get; set; }
}
}
在这个示例中,使用File.ReadAllText()方法读取Json文件,然后将其解析为Person对象。这个示例中的Person类和Address类与之前示例中的类相同。
示例2:从网络上获取Json数据并解析
例如,可以使用以下代码从一个Web API中获取Json数据并解析:
using Newtonsoft.Json;
using System;
using System.Collections.Generic;
using System.Net.Http;
namespace MyNamespace
{
class Program
{
static void Main(string[] args)
{
string url = "https://jsonplaceholder.typicode.com/posts";
List<Post> posts = GetJsonData<List<Post>>(url);
foreach (Post post in posts)
{
Console.WriteLine(post.Id);
Console.WriteLine(post.Title);
Console.WriteLine(post.Body);
}
}
static T GetJsonData<T>(string url)
{
using (HttpClient client = new HttpClient())
{
string json = client.GetStringAsync(url).Result;
T data = JsonConvert.DeserializeObject<T>(json);
return data;
}
}
}
public class Post
{
public int Id { get; set; }
public string Title { get; set; }
public string Body { get; set; }
public int UserId { get; set; }
}
}
在这个示例中,使用HttpClient类从指定的URL中获取Json数据,然后将其解析为List
总结
以上就是C#基于JsonConvert解析Json数据的攻略,包括了Json的介绍、JsonConvert的使用、两个示例演示等。使用JsonConvert可以轻松地解析和处理Json数据,非常实用。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:C#基于JsonConvert解析Json数据的方法实例 - Python技术站