Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/294.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 - Fatal编程技术网

C# 奇怪的对象引用未设置为对象的实例?

C# 奇怪的对象引用未设置为对象的实例?,c#,json,C#,Json,我是C#的新手,我有以下代码: downloads obj = JsonConvert.DeserializeObject<downloads>(data); foreach (KeyValuePair<string, client> kvp in obj.client) { Console.WriteLine("URL: " + kvp.Value.url); Console.WriteLine("SHA1: " + kvp.Value.sha1);

我是C#的新手,我有以下代码:

downloads obj = JsonConvert.DeserializeObject<downloads>(data);

foreach (KeyValuePair<string, client> kvp in obj.client)
{
    Console.WriteLine("URL: " + kvp.Value.url);
    Console.WriteLine("SHA1: " + kvp.Value.sha1);
    matrix[0].Add(kvp.Value.url);
    matrix[0].Add(kvp.Value.sha1);
}
但是现在我如何分配一个json反序列化的变量呢? 以下是完整的代码:

部分JSON:

{ 
"downloads": 
  {
    "client": { "sha1": "e80d9b3bf5085002218d4be59e668bac718abbc6" },
    "server": { "sha1": "952438ac4e01b4d115c5fc38f891710c4941df29" }
   }
 }

从JSON
下载
本身应该是
客户端
对象上的字典,或者包含多个
客户端
类型的属性

class Downloads
{
  public Client client { get; set; }
  public Client server { get; set; }
}

调试说明:序列化类以查看其产生的结果始终是一个好主意-这将让您知道结构是否匹配。

首先,我建议您坚持传统方法

它将帮助您和其他人更好、更清晰地查看您的代码

根据您拥有的类结构,这里是您想要的json格式

string json = @"{clients: {
     'clientname1':{'sha1':'shahashhere','url':'urlhere'},
     'clientname2':{'sha1':'shahashhere','url':'urlhere'}
 }}";
根据需要更改值

这里是链接到。我更改了类名,因为我在处理类名时感到困惑

编辑

因为OP没有JSON字符串的控制权,所以必须创建另一个类来包含
下载
对象

class MinecraftObject {
    Downloads downloads {get;set;}
}
反序列化json字符串

var obj = JsonConvert.DeserializeObject<MinecraftObject>(json);
var download = obj.downloads;
var obj=JsonConvert.DeserializeObject(json);
var download=obj.downloads;

从我在你的小提琴上看到的情况来看,你有一个格式错误的json字符串。如果json的结构实际上不是你正在构建的类型的序列化版本,那么反序列化可能只会返回
null
@DPac实际上没问题(添加
控制台。为它编写
并通过jsonlint.com运行)-它只是与反序列化到的类型不匹配。@JamesThorpe这就是我的意思。json结构与下载的
结构不匹配。但这不是问题所在,我得到的错误是对象引用没有设置为对象的实例。我知道这个错误是什么意思,但我不知道在这种特殊情况下如何解决。我在代码中添加了它,但它说foreach不能对程序变量进行操作。客户端,因为他们没有getenumeratordefinition@giogiowefj-由您决定采用哪种方法读取您拥有的JSON-您现在拥有的类不匹配JSON和您的迭代代码需要更改。选择实现方法通常超出了SO答案的范围,而SO答案通常只是建议方法。json结构不是这样的,我从这里获取文件:。我无法将您的代码应用于该json
class MinecraftObject {
    Downloads downloads {get;set;}
}
var obj = JsonConvert.DeserializeObject<MinecraftObject>(json);
var download = obj.downloads;