C# JSONVERT帮助读取文件

C# JSONVERT帮助读取文件,c#,json.net,C#,Json.net,我试图读取这个json文件,问题是我没有得到任何信息,而且1357总是在变化 这是文件的一部分 { "result": { "1357": { "Random": "4NUX4oFJZEHLbXH5ApeO4", "Random2": "Co04DEVlxkKgpou-6kej", 我用来阅读它的班级 using System; using System.IO; using Newtonsoft.Json; namesp

我试图读取这个json文件,问题是我没有得到任何信息,而且
1357
总是在变化

这是文件的一部分

{
    "result": {
        "1357": {
            "Random": "4NUX4oFJZEHLbXH5ApeO4",
            "Random2": "Co04DEVlxkKgpou-6kej",
我用来阅读它的班级

using System;
using System.IO;
using Newtonsoft.Json;

namespace MyNamespace
{
    public class ReadRandom
    {
        public static ReadRandom Fetch(string filename)
        {
            TextReader reader = new StreamReader(filename);
            string json = reader.ReadToEnd();
            reader.Close();

            ReadRandomResult AssetClassInfoResult = JsonConvert.DeserializeObject<ReadRandomResult>(json);

            return AssetClassInfoResult.result;
        }

        [JsonProperty("Random")]
        public string Random { get; set; }

        [JsonProperty("Random2")]
        public string Random2 { get; set; }


        protected class ReadRandomResult
        {
            public ReadRandom result { get; set; }
        }

    }
}

我正在读“图标url” 下面有一些东西。 很抱歉,我以前以为我不需要它,所以没有把它全部贴出来
当在示例中使用这个时,您发布了一个更改,将密钥更改为正确的密钥,我仍然崩溃。

您发布的json似乎无效。解析器无法读取它

---编辑:

至少你需要

{
    "result": {
        "1357": {
            "Random": "4NUX4oFJZEHLbXH5ApeO4",
            "Random2": "Co04DEVlxkKgpou-6kej"
        }
    }
}

问题是在
结果
属性和
随机
随机2
对象之间有一个额外的“层”。看起来您想要的是:

class ReadRandomResult
{
    public Dictionary<string, ReadRandom> Result { get; set; }
}
test.json的内容

{
    "result": {
        "1357": {
            "Random": "4NUX4oFJZEHLbXH5ApeO4",
            "Random2": "Co04DEVlxkKgpou-6kej"
        }
    }
}
输出:

4NUX4oFJZEHLbXH5ApeO4

您忽略了您拥有
1357
这一事实。假设您拥有以下JSON:

{
    "result": {
        "1357": {
            "Random": "4NUX4oFJZEHLbXH5ApeO4",
            "Random2": "Co04DEVlxkKgpou-6kej"
        } 
    }
}
您的
结果
不是
ReadRandom
,而是
字典

这一条应该有效:

public class ReadRandom
{
    public static Dictionary<string, ReadRandom> Fetch(string filename)
    {
        TextReader reader = new StreamReader(filename);
        string json = reader.ReadToEnd();
        reader.Close();

        return JsonConvert.DeserializeObject<ReadRandomResult>(json).result;
    }

    [JsonProperty("Random")]
    public string Random { get; set; }

    [JsonProperty("Random2")]
    public string Random2 { get; set; }


    protected class ReadRandomResult
    {
        public Dictionary<string, ReadRandom> result { get; set; }
    }
}

// Usage example:
string random = ReadRandom.Fetch(@"C:\filename.txt")["1357"].Random;
公共类ReadRandom
{
公共静态字典获取(字符串文件名)
{
TextReader=新的StreamReader(文件名);
字符串json=reader.ReadToEnd();
reader.Close();
返回JsonConvert.DeserializeObject(json).result;
}
[JsonProperty(“随机”)]
公共字符串随机{get;set;}
[JsonProperty(“Random2”)]
公共字符串Random2{get;set;}
受保护类读取结果
{
公共字典结果{get;set;}
}
}
//用法示例:
string random=ReadRandom.Fetch(@“C:\filename.txt”)[“1357”].random;

我的观点是:在模型类中实现
Fetch
,不是一个好主意。最好实现类似于
ReadRandomParse
的东西,它将返回
ReadRandomResult

检查这个链接,如果json字符串有动态键,它们将使用Idictionary,然后进行迭代。然后从剩下的字符串中,您可以再次反序列化到您想要的对象

@ramafe他想说“发布完整的JSON文件”。这是不完整的原因吗?例如,如果它是一个配置文件,您可以编辑它。如果它来自api,请联系api开发人员。因为无效的json可能不会对任何人有利。我只发布了它的顶部,因为它很大,我也从互联网上下载了它,我不能更改它或不需要更改它。我只需要从iti中读取几行。我尝试时,似乎总是在
反序列化对象
上崩溃this@ramafe:没有比“撞车”更多的细节再也帮不了你了。我建议您在问题中提供一个简短但完整的示例,以及崩溃的详细信息(完整堆栈跟踪)。还在努力锻炼吗why@ramafe当前位置如果没有一个简短但完整的示例,我们将无法进一步帮助您。我编辑了我的答案,展示了一个简短但完整的例子,它确实有效。好的,我想我已经解决了问题,你的例子是有效的,我得到的回复与你说的一样。我认为问题在于我读取的json文件更大。这是我返回的sting的开始,读取我的
“{\r\n\t\”result\”:{\r\n\t\t\“1357\”:{\r\n\t\t\“Random\”:
,这是我从您的示例
“{\r\n\”result\”:{\r\n\“1357\”:{\r\n\“Random\”:
4NUX4oFJZEHLbXH5ApeO4
{
    "result": {
        "1357": {
            "Random": "4NUX4oFJZEHLbXH5ApeO4",
            "Random2": "Co04DEVlxkKgpou-6kej"
        } 
    }
}
public class ReadRandom
{
    public static Dictionary<string, ReadRandom> Fetch(string filename)
    {
        TextReader reader = new StreamReader(filename);
        string json = reader.ReadToEnd();
        reader.Close();

        return JsonConvert.DeserializeObject<ReadRandomResult>(json).result;
    }

    [JsonProperty("Random")]
    public string Random { get; set; }

    [JsonProperty("Random2")]
    public string Random2 { get; set; }


    protected class ReadRandomResult
    {
        public Dictionary<string, ReadRandom> result { get; set; }
    }
}

// Usage example:
string random = ReadRandom.Fetch(@"C:\filename.txt")["1357"].Random;