使用 C# 和 JSON.net 读取 JSON 文件

本文关键字:JSON 读取 文件 net 使用 | 更新日期: 2023-09-27 18:36:57

我在理解如何使用 JSON.net 读取 json 文件时遇到了一些麻烦。

该文件如下所示:

"version": {   
    "files": [
        {
            "url": "http://www.url.com/",
            "name": "someName"
        },
        { 
            "name": "someOtherName"
            "url": "http://www.url.com/"
            "clientreq": true
        }, ....

我真的不知道如何阅读这个文件..我需要做的是阅读行并通过"url"下载文件。我知道如何下载文件等等,但我不知道如何使用 JSON.net 来读取 json 文件并循环访问每个部分,然后下载文件。

你能帮忙吗?

使用 C# 和 JSON.net 读取 JSON 文件

最简单的方法是将 json 反序列化为动态对象,如下所示

然后,您可以通过循环访问其属性以获取网址

dynamic result = Newtonsoft.Json.JsonConvert.DeserializeObject(jsonString);
var urls = new List<string>();
foreach(var file in result.version.files)
{
    urls.Add(file.url); 
}

>http://json2csharp.com/可帮助您根据 JSON 数据类型创建 C# 类。一旦你的类与你的数据匹配,你就可以使用 Json.NET 反序列化,然后处理你的数据:

var myMessage = JsonConvert.DeserializeObject<MyMessage>(myString);
foreach (var file in myMessage.Version.Files)
{
    // download file.Url
}

或者,您可以将其作为dynamic对象进行访问:

dynamic myMessage = JsonConvert.DeserializeObject(myString);
foreach (var file in myMessage.version.files)
{
    // download file.url
}

如果使用类,它们可能是:

public class File
{
    public Uri Url { get; set; }
    public string Name { get; set; }
    public bool? ClientReq { get; set; }
}
public class Version
{
    public IList<File> Files { get; set; }
}
public class MyMessage
{
    public Version Version { get; set; }
}

(请注意,Json.Net 足够智能,可以将大小写不同的属性映射,并将 URL 转换为 Uri 对象) 当字符串如下所示时,它起作用:

string myString = @"{""version"": {   
    ""files"": [
        {
            ""url"": ""http://www.url.com/"",
            ""name"": ""someName""
        },
        { 
            ""name"": ""someOtherName"",
            ""url"": ""http://www.url.com/"",
            ""clientreq"": true
        }]}}";