【发布时间】:2018-05-06 00:30:05
【问题描述】:
我进行了研究,找到了几个解决问题的方法,这些方法与我的问题几乎相同,但到目前为止都没有奏效。我想要完成的是读取第一项是数组的 json 文件,如下所示:
{
"the_array":[
我得到的错误是: 对象引用未设置为对象的实例。
我得到的最接近的是当我尝试写出整个 json 但我只得到数组中的第一项。 [编辑:以下澄清]
代码如下:
程序.cs
using Newtonsoft.Json;
using System;
using System.IO;
namespace JsonToXML
{
class Program
{
static void Main(string[] args)
{
try
{
string json = File.ReadAllText(@"w:\code\csharp\JsonToXML\simple-sample.json").ToString();
Accounts accs = JsonConvert.DeserializeObject<Accounts>(json);
foreach (var acc in accs.account_list)
{
Console.Write(acc.id.ToString());
Console.ReadKey(true);
}
catch(Exception ex)
{
Console.Write(ex.Message.ToString());
Console.ReadKey(true);
}
}
}
}
Accounts.cs
using System.Collections.Generic;
namespace JsonToXML
{
class Accounts
{
public List<accounts> account_list { get; set; }
public class accounts
{
public string id { get; set; }
public string bic { get; set; }
}
}
}
simple_sample.json
{
"account_list": [
{
"id": "AsdF01234EfgH4567",
"bic": "A"
},
{
"id": "AbcD1234eFgH568",
"bic": "B"
},
{
"id": "Baas786DD5886RT",
"bic": "C"
},
{
"id": "458A889B8889T784W",
"bic": "D"
}
]
}
我也尝试过使用List<Accounts>,但没有成功。
如果问题有任何不清楚的地方,请告诉我,我会尽我所能澄清。
我在 .Net Core 中编写代码
[编辑:来自上面的澄清] 如果我尝试:
var accs = JsonConvert.DeserializeObject<dynamic>(json);
Console.Write(accs.ToString());
结果是: { "id": "AsdF01234EfgH4567", “比克”:“瑞典” }
已解决
问题出在 json 文件中。虽然它看起来有效,但不知何故 sublime 错误地保存了它。用完全相同的内容重新制作 json 文件后,它按预期工作。
【问题讨论】:
-
不应该
public string bic是public string name? -
尝试使用
JsonConvert.DeserializeObject<dynamic>(json);看看会带来什么。它将为您提供反序列化过程实际尝试执行的操作的良好指示,从而为您指明正确的方向。 -
你试过 .toList() 了吗?
-
@RubyHaus 我意识到我根本没有解释清楚。我确实尝试过,我已经将结果添加到问题中,因为我无法弄清楚为什么结果是这样的。