我试图从这个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; }
}
}
}
其中一个答案的错误
Exception thrown: 'System.ArgumentException' in Newtonsoft.Json.dll
Exception thrown: 'Newtonsoft.Json.JsonSerializationException' in Newtonsoft.Json.dll
Exception thrown: 'Newtonsoft.Json.JsonSerializationException' in Newtonsoft.Json.dll
Exception thrown: 'Newtonsoft.Json.JsonSerializationException' in Newtonsoft.Json.dll
Exception thrown: 'Newtonsoft.Json.JsonSerializationException' in Newtonsoft.Json.dll
Exception thrown: 'System.Reflection.TargetInvocationException' in mscorlib.dll
An unhandled exception of type 'System.Reflection.TargetInvocationException' occurred in mscorlib.dll
Additional information: Exception has been thrown by the target of an invocation.
我试图阅读&#34; icon_url&#34; 在此之下的一些事情。 对不起,我没有发布之前认为我不需要它 在示例中使用它时,您发布了一个更改键,右键,我仍然崩溃。
答案 0 :(得分:2)
问题在于你已经获得了额外的&#34;层&#34;在result
属性与包含Random
和Random2
的对象之间。看起来你想要像:
class ReadRandomResult
{
public Dictionary<string, ReadRandom> Result { get; set; }
}
然后您就可以使用:
var container = JsonConvert.DeserializeObject<ReadRandomResult>(json);
var result = container.Result["1357"];
作为备注,我强烈建议您将ReadRandomResult
课程移到ReadRandom
之外......拥有一个&#34;容器&#34;这是非常不寻常的。 class nested inside 它包含的类。这可能会引起混淆。
这是一个简短但完整的例子:
using System;
using System.Collections.Generic;
using System.IO;
using Newtonsoft.Json;
class ReadRandom
{
[JsonProperty("Random")]
public string Random { get; set; }
[JsonProperty("Random2")]
public string Random2 { get; set; }
}
class ReadRandomContainer
{
[JsonProperty("Result")]
public Dictionary<string, ReadRandom> Result { get; set; }
}
class Program
{
static void Main(string[] args)
{
var json = File.ReadAllText("test.json");
var container = JsonConvert.DeserializeObject<ReadRandomContainer>(json);
Console.WriteLine(container.Result["1357"].Random);
}
}
test.json
的内容:
{
"result": {
"1357": {
"Random": "4NUX4oFJZEHLbXH5ApeO4",
"Random2": "Co04DEVlxkKgpou-6kej"
}
}
}
输出:
4NUX4oFJZEHLbXH5ApeO4
答案 1 :(得分:0)
您发布的json似乎无效。解析器无法读取它。
---编辑:
至少你需要
{
"result": {
"1357": {
"Random": "4NUX4oFJZEHLbXH5ApeO4",
"Random2": "Co04DEVlxkKgpou-6kej"
}
}
}
答案 2 :(得分:0)
您忽略了1357
这一事实。假设你有以下JSON:
{
"result": {
"1357": {
"Random": "4NUX4oFJZEHLbXH5ApeO4",
"Random2": "Co04DEVlxkKgpou-6kej"
}
}
}
您的result
不是ReadRandom
,而是Dictionary<string, 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;
我的意见是:在模型类中实现Fetch
并不是一个好主意。最好是实现ReadRandomParse
这样会返回ReadRandomResult
。
答案 3 :(得分:0)
检查此链接,其中json字符串具有动态键,它们使用Idictionary,然后迭代。 Deserializing JSON with dynamic keys。然后从剩余的字符串中,您可以再次反序列化到您想要的对象