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

时间:2013-10-25 17:35:03

标签: c# json json.net

我无法理解如何使用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文件并遍历每个部分,并下载文件..

你能帮忙吗?

2 个答案:

答案 0 :(得分:8)

最简单的方法是将json反序列化为像这样的动态对象

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

dynamic result = Newtonsoft.Json.JsonConvert.DeserializeObject(jsonString);

var urls = new List<string>();

foreach(var file in result.version.files)
{
    urls.Add(file.url); 
}

答案 1 :(得分:5)

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
        }]}}";