【问题标题】:How to use Json.net to read an array from a json file?如何使用 Json.net 从 json 文件中读取数组?
【发布时间】: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&lt;Accounts&gt;,但没有成功。

如果问题有任何不清楚的地方,请告诉我,我会尽我所能澄清。

我在 .Net Core 中编写代码

[编辑:来自上面的澄清] 如果我尝试:

var accs = JsonConvert.DeserializeObject<dynamic>(json);
Console.Write(accs.ToString());

结果是: { "id": "AsdF01234EfgH4567", “比克”:“瑞典” }


已解决

问题出在 json 文件中。虽然它看起来有效,但不知何故 sublime 错误地保存了它。用完全相同的内容重新制作 json 文件后,它按预期工作。

【问题讨论】:

  • 不应该public string bicpublic string name
  • 尝试使用JsonConvert.DeserializeObject&lt;dynamic&gt;(json); 看看会带来什么。它将为您提供反序列化过程实际尝试执行的操作的良好指示,从而为您指明正确的方向。
  • 你试过 .toList() 了吗?
  • @RubyHaus 我意识到我根本没有解释清楚。我确实尝试过,我已经将结果添加到问题中,因为我无法弄清楚为什么结果是这样的。

标签: c# arrays json json.net


【解决方案1】:

很简单,你只有 GET FIRST 因为这`

Console.ReadKey(true)`

Readkey 用于等待用户按键,因此它不会进一步执行,直到您按下某个键读取 Here

最终代码

  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.WriteLine(acc.id.ToString());


            }
        }

        catch (Exception ex)
        {
            Console.Write(ex.Message.ToString());
           throw ex;
        }
        Console.ReadKey();
    }

【讨论】:

  • 对我来说,这仍然不起作用并抛出:对象引用未设置为对象的实例。您是否将其作为 Microsoft.NetCore.App 运行并且它为您工作?
  • 我现在通过重新制作 json 文件让它工作了。似乎是 sublime 如何保存 json 文件的问题。编辑问题以包含解决方案。
  • @Thomas 我已经在 .net core 和 .net 版本中测试过这段代码,并且工作正常。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多