Как мне преобразовать файл Json (содержащий массив) в список (объекта класса) C # Unity

#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); ‘