JSON对象显示为Null。为什么?

时间:2017-04-02 00:27:49

标签: c# json

这是类数据库:

namespace vVvBot.Model
{
    public class Database
    {
        public List<CustomCommand> CustomCommands { get; set; }
        public List<CustomEvent> CustomEvents { get; set; }
    }
}

这是CustomEvent的类:

namespace vVvBot.Model
{
    public class CustomEvent
    {
        public string Name { get; set; }
        public bool Enabled { get; set; }
        public List<CustomCommand> Commands { get; set; }
    }
}

这是CustomCommand类:

namespace vVvBot.Model
{
    public class CustomCommand
    {
        public string Keyword { get; set; }
        public CommandType Type { get; set; }
        public string Message { get; set; }
        public bool Enabled { get; set; }
    }
}

这是我反序列化和序列化数据库对象的类

namespace vVvBot.Data
{
    public class FileJsonContext
    {
        public Database ReadToObject(string fileName)
        {
            dynamic jsonData = File.ReadAllText(fileName);

            return JsonConvert.DeserializeObject<Database>(jsonData) ?? new Database();
        }

        public void ObjectToFile(string fileName, Database database)
        {
            dynamic jsonData = JsonConvert.SerializeObject(database, Formatting.Indented);

            File.WriteAllText(fileName, jsonData);
        }
    }
}

在有问题的文件中,这是我实例化数据库的地方:

private Database _database;
public Database Database => _database ?? (_database = JsonContext.ReadToObject("Commands.txt"));

问题在于:

var messageindex = Database.CustomEvents[index].Commands.FindLastIndex(x => x.Type == CommandType.Welcome);

它尝试完成该行,但会立即返回,因为它返回null。自定义事件中有一个List应该调用customcommand列表,以便我可以访问该对象。不知道为什么会回到NULL。

Json文件包括:

{
  "CustomCommands": [
    {
      "Keyword": "Hello",
      "Type": 0,
      "Message": "World",
      "Enabled": true
    },
    {
      "Keyword": "Test",
      "Type": 0,
      "Message": "test",
      "Enabled": true
    },
    {
      "Keyword": "greeting",
      "Type": 3,
      "Message": "this isnt a test ",
      "Enabled": true
    },
    {
      "Keyword": "leaving",
      "Type": 4,
      "Message": "Sorry to see you go ",
      "Enabled": true
    },
    {
      "Keyword": "faq",
      "Type": 1,
      "Message": "This is a FAQ TEST ",
      "Enabled": true
    },
    {
      "Keyword": "Hi",
      "Type": 0,
      "Message": "Hilo ",
      "Enabled": false
    },
    {
      "Keyword": "Hi",
      "Type": 0,
      "Message": "Hilo ",
      "Enabled": false
    }
  ],
  "CustomEvents": [
    {
      "Name": "greeting",
      "Enabled": true
    },
    {
      "Name": "leaving",
      "Enabled": true
    }
  ]
}

1 个答案:

答案 0 :(得分:0)

我很久以前遇到过这个问题,我认为这个问题来自Unicode。 所以我为此写了一个函数。你可以用它:

    List<T> ToJson<T>(byte[] byteArray) where T : new()
    {

    MemoryStream stream = new MemoryStream(byteArray);


    JsonSerializer se = new JsonSerializer();

    StreamReader re = new StreamReader(stream);
    JsonTextReader reader = new JsonTextReader(re);
        return se.Deserialize<List<T>>(reader);
     }

我使用这个函数像这样:     的toJSON(data.ToArray());

数据是一个MemoryStream。