我目前正在创建一个基于文本的小游戏。在这显然有多个房间,我希望从JSON文件加载这些房间。我目前正在这样做:
dynamic jRooms = Json.Decode(file);
for (int i = 0; i < Regex.Matches( file, "Room" ).Count; i++){
name[i] = jRooms.Game.Room[i];
description[i] = jRooms.Game.Room.Attributes.Description[i];
exits[i] = jRooms.Game.Room.Attributes.Exits[i];
_count++;
}
从以下JSON文件加载信息:
{
'Game': [{
'Room': 'Vault 111 Freeze Chamber',
'Attributes': {
'Description': 'The freeze chamber of the vault you entered after the nuclear fallout.',
'Exits': 'North.Vault 111: Main Hallway'
},
'Room': 'Vault 111 Main Hallway',
'Attributes': {
'Description': 'The main hallway of the vault.',
'Exits': 'South.Vault 111: Freeze Chamber'
}
}]}
不幸的是,这在操作期间引发了一个错误,我似乎无法解决,具体如下:
Microsoft.CSharp.RuntimeBinder.RuntimeBinderException:无法对空引用执行运行时绑定 在CallSite.Target(Closure,CallSite,Object,Int32) 在System.Dynamic.UpdateDelegates.UpdateAndExecute2 [T0,T1,TRet](CallSite站点,T0 arg0,T1 arg1) 在TBA.Loader.Rooms() 在TBA.Program.Main(String [] args)
任何帮助都会受到高度赞赏,因为我完全不知道出了什么问题而且没有工作。如果您需要我的代码,只需要它。
感谢。
答案 0 :(得分:1)
问题在于你的JSON。 JSON不允许单引号(可能它们具有不同的含义或根本没有含义)。来源 - W3Schools.
使用JSONLint等服务来验证JSON并检查错误。甚至JSONLint声明你的JSON,无效。但是,使用双引号,它被声明为有效。你应该使用这样的双引号:
{
"Game": [
{
"Room": "Vault111FreezeChamber",
"Attributes": {
"Description": "Thefreezechamberofthevaultyouenteredafterthenuclearfallout.",
"Exits": "North.Vault111: MainHallway"
},
"Room": "Vault111MainHallway",
"Attributes": {
"Description": "Themainhallwayofthevault.",
"Exits": "South.Vault111: FreezeChamber"
}
}
]
}