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

使用C#和JSON.net读取JSON文件,c#,json,json.net,C#,Json,Json.net,我很难理解如何使用JSON.net读取JSON文件 该文件如下所示: "version": { "files": [ { "url": "http://www.url.com/", "name": "someName" }, { "name": "someOtherName" "url": "http://www.url.com/"

我很难理解如何使用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文件并循环浏览每个部分,然后下载文件


您能提供帮助吗?

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

然后您可以通过一个获取URL的循环来访问它的属性

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

var urls = new List<string>();

foreach(var file in result.version.files)
{
    urls.Add(file.url); 
}
dynamic result=Newtonsoft.Json.JsonConvert.DeserializeObject(jsonString);
var url=新列表();
foreach(result.version.files中的var文件)
{
Add(file.url);
}
帮助您根据JSON数据类型创建C#类。一旦有了与数据匹配的类,就可以反序列化数据,然后使用数据:

var myMessage = JsonConvert.DeserializeObject<MyMessage>(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足够聪明,可以映射大小写不同的属性”这并不完全正确,您需要使用CamelCasePropertyNamesContractResolver来实现这一点。@EstebanElverdin默认情况下似乎可以这样做,因为我得到的代码可以工作,(它将
clientreq
映射到
clientreq
)没有明确指定任何合同解析程序。是的,你是对的,在你的示例中不需要这样做,我将回顾我正在使用的一些代码,看看为什么默认情况下它没有这样做。感谢链接到我可以看到我自己使用了很多。我自己会花很长时间来计算这个结构。我最终使用了这个方法,因为它看起来是最简单的,似乎是可行的!非常感谢。关于信息,我使用streamreader读取readtoend文件的内容,然后将其用作“jsonString”
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; }
}
string myString = @"{""version"": {   
    ""files"": [
        {
            ""url"": ""http://www.url.com/"",
            ""name"": ""someName""
        },
        { 
            ""name"": ""someOtherName"",
            ""url"": ""http://www.url.com/"",
            ""clientreq"": true
        }]}}";