数组被随机解析为null,我不明白为什么

时间:2018-02-20 16:23:34

标签: c# json json.net

所以这里是JSON文件,我试图在JSON.Net中解析我们

{
  "SystemsInGal": [
    {
      "Name": "HIP 16607",
      "xPos": 0,
      "yPos": 0,
      "StationsInSys": [
        {
          "Name": "Thome Gateway",
          "SystemName": "HIP 16607",
          "DistanceFromStar": 2573,
          "PricePerFuel": 10
        }
      ]
    },
    {
      "Name": "Frenis",
      "xPos": 10,
      "yPos": 10,
      "StationsInSys": [
        {
          "Name": "Parsons City",
          "SystemName": "Frenis",
          "DistanceFromStar": 32,
          "PricePerFuel": 20
        }
      ]
    }
  ]
}

我的问题在这里

"StationsInSys": [
        {
          "Name": "Parsons City",
          "SystemName": "Frenis",
          "DistanceFromStar": 32,
          "PricePerFuel": 20
        }
      ]

当被JSON.NET解析时,它只是给这个数组赋值null,这当然不是我之后的。第一个StationsInSys数组被正确解析,但第二个不是。人们已经检查过,并说他们找不到任何我无法纠正的差异。 JSONlint声称此文件是有效的JSON。我唯一的另一个猜测是JSON.NEt本身存在问题,但我认为情况并非如此

编辑:这是我如何设置课程

public class Galaxy
    {
        public SolarSystem[] SystemsInGal { get; set; }
        public Player player { get; set; }
    }

public class Station
    {
        public string Name { get; set; }
        public string SystemName { get; set; }
        public int DistanceFromStar { get; set; }
        public int PricePerFuel { get; set; }
        //TODO Add trade data here
    }

public class SolarSystem
    {
        public string Name { get; set; }
        public int xPos { get; set; }
        public int yPos { get; set; }
        public Station[] StationsInSys { get; set; }
    }

Galaxy gal = JsonConvert.DeserializeObject<Galaxy>(jsonText);

我希望有帮助

2 个答案:

答案 0 :(得分:1)

我尝试使用Visual Studio 2017的Edit | Paste Special | Paste JSON as classes功能为此创建类。这似乎有效。 (我没有费心去纠正生成的类名的大小。)

以下是生成的代码 - 它与您的代码有什么不同?

using System;
using Newtonsoft.Json;

namespace Demo
{
    public class Rootobject
    {
        public Systemsingal[] SystemsInGal { get; set; }
    }

    public class Systemsingal
    {
        public string Name { get; set; }
        public int xPos { get; set; }
        public int yPos { get; set; }
        public Stationsinsy[] StationsInSys { get; set; }
    }

    public class Stationsinsy
    {
        public string Name { get; set; }
        public string SystemName { get; set; }
        public int DistanceFromStar { get; set; }
        public int PricePerFuel { get; set; }
    }

    class Program
    {
        static void Main()
        {
            string data =
                @"{
  ""SystemsInGal"": [
    {
      ""Name"": ""HIP 16607"",
      ""xPos"": 0,
      ""yPos"": 0,
      ""StationsInSys"": [
        {
          ""Name"": ""Thome Gateway"",
          ""SystemName"": ""HIP 16607"",
          ""DistanceFromStar"": 2573,
          ""PricePerFuel"": 10
        }
      ]
    },
    {
      ""Name"": ""Frenis"",
      ""xPos"": 10,
      ""yPos"": 10,
      ""StationsInSys"": [
        {
          ""Name"": ""Parsons City"",
          ""SystemName"": ""Frenis"",
          ""DistanceFromStar"": 32,
          ""PricePerFuel"": 20
        }
      ]
    }
  ]
}";
            var result = JsonConvert.DeserializeObject<Rootobject>(data);

            Console.WriteLine(result.SystemsInGal.Length);
        }
    }
}

答案 1 :(得分:1)

是的,事实证明我是一个彻头彻尾的白痴。我正在编辑的文件是我的单元测试使用的文件的副本。因此,我的编辑没有生效。

很抱歉发布此内容。我当时真的很沮丧,因为没有任何工作,Stack Overflow总是我最后的选择。我要留下我从中学到的两件事。

  • 确保您的代码没有拼写错误
  • 如果找不到解决方案STOP,请稍后再回来。我回到它后不到五分钟就找到了解决方案