#c# #json #unity3d
#c# #json #unity3d
Вопрос:
я использую NewtonSoft Json API для чтения текстов моих диалогов, и у меня возникли проблемы с заполнением списка информации о диалогах.
я хотел бы заполнить свой список (этого класса ниже), используя один из этих 2 форматов Json.
[System.Serializable]
public class DialogueList
{
public string dialogueName;
public bool isDialogueOption;
public string[] dialogueText;
public string option1;
public string option2;
}
Пример: я хотел бы, чтобы список был таким.
//(Slot 1)
dialogueList[0].dialogueName = "Nyma";
dialogueList[0].isDialogueOption = true;
dialogueList[0].dialogueText[0] = "Hi Xire! how are you?";
dialogueList[0].dialogueText[1] = "Hi Nyma! i'm fine and you?";
dialogueList[0].option1 = "Fine!";
dialogueList[0].option2 = "I'm not fine!";
//(Slot2)
dialogueList[1].dialogueName = "Xire";
dialogueList[1].isDialogueOption = false;
dialogueList[1].dialogueText[0] = "Run Nyma";
dialogueList[1].dialogueText[1] = "I'm Running Xire";
dialogueList[1].option1 = Null;
dialogueList[1].option2 = Null;
Формат Json 1:
{
"Dialogue_Nyma": [
{
"dialogueName": "Nyma",
"isDialogueOption": true,
"dialogueText": [
"Hi Xire! how are you?",
"Hi Nyma! i'm fine and you?"
],
"Option1": "Fine!",
"Option2": "i'm not fine!"
}
],
"Dialogue_Xire": [
{
"dialogueName": "Xire",
"isDialogueOption": false,
"dialogueText": [
"Run Nyma!",
"i'm Running Xire."
],
"Option1": null,
"Option2": null
}
]
}
Формат Json 2:
[
{
"dialogueName": "Nyma",
"isDialogueOption": true,
"dialogueText": [
"Hi Xire! how are you?",
"Hi Nyma! i'm fine and you?"
],
"Option1": "Fine!",
"Option2": "i'm not fine!"
},
{
"dialogueName": "Xire",
"isDialogueOption": false,
"dialogueText": [
"Run Nyma!",
"i'm Running Xire."
],
"Option1": null,
"Option2": null
}
]
Если кто-нибудь может помочь мне найти способ десериализации одного из этих форматов json для заполнения моего списка, я буду очень благодарен!
я также попытался создать класс, содержащий массив диалогового списка
[System.Serializable]
public class DialogueListCollection
{
public DialogueList[] dialogueList;
}
и попытался проанализировать следующим образом
string path = "DialogueJson/Textos";
var contents = Resources.Load<TextAsset>(path);
dialogueList = JsonConvert.DeserializeObject<DialogueListCollection>(contents.text);
но не сработало.
Ответ №1:
Ваш класс должен представлять диалоговое окно:
public class Dialogue
{
public string dialogueName;
public bool isDialogueOption;
public string[] dialogueText;
public string option1;
public string option2;
}
(Обратите внимание, что «Список» исчез из имени класса)
Затем вы можете использовать Newtonsoft для десериализации его в массив:
var json = @"[
{
""dialogueName"": ""Nyma"",
""isDialogueOption"": true,
""dialogueText"": [
""Hi Xire! how are you?"",
""Hi Nyma! i'm fine and you?""
],
""Option1"": ""Fine!"",
""Option2"": ""i'm not fine!""
},
{
""dialogueName"": ""Xire"",
""isDialogueOption"": false,
""dialogueText"": [
""Run Nyma!"",
""i'm Running Xire.""
],
""Option1"": null,
""Option2"": null
}
]";
Dialogue[] list = JsonConvert.DeserializeObject<Dialogue[]>(json);
Ваш массив list
теперь содержит две записи.
Второй предоставленный вами формат правильно отформатирован и используется в этом примере.
Ответ №2:
Добавьте класс, который будет содержать только массив DialogueList и проанализируйте json как этот класс. Вам нужно будет добавить одно поле в json, чтобы поместить в него список.
Комментарии:
1. у меня есть класс (DialogueListCollection), который содержит массив диалогового списка, и я пытаюсь проанализировать его таким образом, но не работает. ‘ путь к строке = «DialogueJson/ Textos»; содержимое переменной = Ресурсы. Загрузите<TextAsset>(путь); dialogueList = JsonConvert. DeserializeObject<DialogueListCollection>(contents.text); ‘