Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在c中解析JSON列表到int数组_C#_Json.net - Fatal编程技术网

C# 在c中解析JSON列表到int数组

C# 在c中解析JSON列表到int数组,c#,json.net,C#,Json.net,我在将JSON数字列表读入c int[]数组时遇到问题 我试过SO的几个建议,但没有一个奏效。 我将如何使用JSON.net实现这一点 从JSON文件中提取: { "course": "Norsk", "grades": [6, 3, 5, 6, 2, 8] } 我在c中尝试过的: // Reads the JSON file into a single string string json = File.ReadAllText(jfile);

我在将JSON数字列表读入c int[]数组时遇到问题

我试过SO的几个建议,但没有一个奏效。 我将如何使用JSON.net实现这一点

从JSON文件中提取:

    {
        "course": "Norsk",
        "grades": [6, 3, 5, 6, 2, 8]
    }
我在c中尝试过的:

// Reads the JSON file into a single string
string json = File.ReadAllText(jfile);
Console.WriteLine(json);

// Parsing the information to a format json.net can work with
JObject data = JObject.Parse(json);

JToken jToken = data.GetValue("grades");
jGrades = jToken.Values<int>().ToArray();
以及:

正如您从c摘录中所看到的,我尝试过使用数组和列表,但无法使其正常工作

在第一个数组示例中,我得到了System.NullRefrenceException,而在列表示例中,我得到了几个错误,例如无法将类型为'whereselectlistiterator'2[Newtonsoft.JSON]的对象强制转换为类型为'System.IConvertiable'

感谢您提供的任何提示。

JObject.Parsejson是您的根对象

Parsejson[grades]是列表/数组

您所要做的就是:将项目转换为适当的类型

var list = JObject.Parse(json)["grades"].Select(x => (int)x).ToArray();
您还可以声明一个类

public class RootObject
{
    public string course { get; set; }
    public List<int> grades { get; set; }
}
并将整个对象反序列化为

var myobj = JsonConvert.DeserializeObject<RootObject>(json);
var grade = myobj.grades[0];

我通常会定义一个具有相关属性的类,然后简单地转换对象

public class CourseReport
{
     public string Course { get; set; }
     public ICollection<int> Grades { get; set; }
}

// Reads the JSON file into a single string
string json = File.ReadAllText(jfile);
Console.WriteLine(json);

// Parsing the information to a format json.net can work with
var courseReport = JsonConvert.DeserializeObject<CourseReport>(json);

foreach (var grade in courseReport.Grades)
{
     Console.WriteLine(grade);
}

谢谢,我尝试了您的第一个解决方案,但最终得到一个系统异常错误。如果这样做有效,我将如何访问这些信息,因为它是一个变量而不是一个数组?我可以为它编制索引并将其添加到列表中吗?例如:var列表。。。等级。地址列表[i]@Hagland a上面的代码与您问题中的json一起工作,b感谢您阅读了var,但是不,代码不工作:@Hagland,所以您认为这个差异不重要!!。好的,祝你好运。每当你决定问一个好问题,我们都会here@Hagland你认为jobj[someprop]会在json中的任何地方找到值吗。Json是一种分层表示,如果不知道整个结构,就无法给出正确的答案。。。如果您不想发布真正的json,那么打开文档并阅读它们。这是所有你可以从我们这里得到的你所提供的信息。
public class CourseReport
{
     public string Course { get; set; }
     public ICollection<int> Grades { get; set; }
}

// Reads the JSON file into a single string
string json = File.ReadAllText(jfile);
Console.WriteLine(json);

// Parsing the information to a format json.net can work with
var courseReport = JsonConvert.DeserializeObject<CourseReport>(json);

foreach (var grade in courseReport.Grades)
{
     Console.WriteLine(grade);
}