これは、クラスのデータベースです:JSONオブジェクトがNullとして表示されます。どうして?
namespace vVvBot.Model
{
public class Database
{
public List<CustomCommand> CustomCommands { get; set; }
public List<CustomEvent> CustomEvents { get; set; }
}
}
これはCustomEventのためのクラスです:これはクラスCustomCommandある
namespace vVvBot.Model
{
public class CustomEvent
{
public string Name { get; set; }
public bool Enabled { get; set; }
public List<CustomCommand> Commands { get; set; }
}
}
:
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で戻る私はオブジェクトにアクセスできるように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
}
]
}
あなたが共有したJSON文字列では、 "CustomEvents"の項目にはプロパティ "コマンド"が設定されていません。したがって、デシリアライズすると、カスタムイベントのいずれもコマンドを持たないでしょう。空のリストになるので、空のリストを照会すると常にNULLが返されます。 –
CustomCommandsからすべての項目を取得できませんか? CustomEventsクラスで呼び出すとき@ChetanRanpariya 既にCustomCommandsにある値を使用したい場合 –
このようには機能しません.JSONの逆シリアル化は他のプロパティに基づいてプロパティを初期化しません。これは、JSON文字列にある値に基づいています。ここで 'Database'オブジェクトは' CustomCommands'と 'CustomEvents'プロパティに値を持ちますが、' CustomEvents'のアイテムは 'CustomCommands'プロパティに値を持たないでしょう。 –