J'essaie de faire un jeu de quiz multi-sujets pour les enfants utilisant Unity3D et des questions et des réponses sont stockées dans un fichier JSON. Maintenant, je veux créer un objet nommé "science" et "maths" et je veux stocker leurs questions respectives et quand je veux accéder à la science, je pouvais boucler et trouver et stocker simplement la question scientifique dans ma chaîne au lieu de la lecture du tout Fichier JSON.
Voici mon fichier JSON. P>
[Serializable] public class Course { public string CourseName; public string No_Of_Ques; public QnA[] Ques_Data; } [Serializable] public class QnA { public string Quesion; public string Answer; public string[] options; }
4 Réponses :
Pour sérialiser et désérialiser des objets que vous devez créer une classe C # (dans votre cas doit être la classe de cours) qui peut être premier Votre JSON devrait être valide, que ce soit, vous pouvez le valider ici . P> Serialize et désériorize Vous pouvez Utilisez JSONUtilitity à certains points, car il ne désère désérialiser des matrices déchiquetées, des objets complexes, etc. Je recommande d'utiliser des logiciels de tiers comme Newtonsoft ou implémentez votre propre méthode de sérialisation / désérialisation de votre Way . ecstrong>edithItithOeDith: Le fichier JSON doit être sans la partie "Science =", devrait ressembler à: P> [sérialisable] code>.
path = Application.dataPath + "/QnA.json";
string json = File.ReadAllText(path);
Course scienceCourse = JsonUtility.FromJson<Course>(json); //notice the name of the variable!
mon frère c'est exactement comment il a été écrit auparavant. Mais maintenant, j'ai un nom de cours "Maths" aussi et cela a ses propres questions. Maintenant, je ne veux pas stocker des questions de la science dans ma variable String JSON lorsque le quiz maths est actif. Actuellement, il apporte tout dans le fichier JSON et la stocke dans la variable String JSON.
@mustafa j'ai mis à jour la réponse, dis-moi si cela aide
Si vous souhaitez stocker plusieurs cours de votre fichier, vous devrez les stocker en tant que tableau JSON (A Vous faites avec des questions):
var course = JToken.Parse(jsonString) .SelectToken("$[?(@.CourseName == 'Math')]") .ToObject<Course>();
Utiliser Il devrait être plus similaire à p> envelopper avec: p> et utiliser p> pour le maintenir en tant qu'objet C #. p> à partir d'ici, vous pouvez accéder à vos cours par Je suggère également d'utiliser comme une suggestion supplémentaire, au lieu de dévoiler tout le quiz dans un seul JSON, vous pouvez envisager d'envoyer un seul science = {...} code> Pour définir votre objet est où vous êtes confus sur les définitions d'objet. Ce n'est pas un objet code> science code>. C'est un objet code> objet code>.
quiz. Cours [0] .Questions [17] Code> ou écrire des méthodes d'assistant en classe de Quiz pour appeler des cours par Enums comme
Quiz.getcourse (CourseCategory.Science) .Questions [8] Code>. P >
questions code> au lieu de
question_data code>. C'est plus sympathique et vous aide sémantiquement. P>
Objet Code> Selon Sur le parcours, demandé à l'aide d'une requête comme
http://myquizserver.com/quiz.php?course=science code>. Puisque vous avez mentionné des centaines de lignes de Json, vous pouvez également envisager d'obtenir une question de données par la question. P> p>
Vous n'avez pas besoin de l'envelopper avec un nom Quiz code> Les noms de classe ne comptent pas vraiment pour la désérialisation, il pourrait également être
Données de la classe publique Code> Seul uniquement les noms de champs ont correspondre à ceux de JSON. Un objet racine JSON valide n'a pas besoin d'un nom et peut simplement être
{....} code>
Créez une classe de cours dans laquelle Créez des fonctions Getter et Setter pour toutes vos touches JSON, par exemple:
Si votre fichier JSON est comme celui-ci: P>
using System; using System.Collections.Generic; using System.IO; using System.Text.Json;
Les commentaires ne sont pas pour une discussion prolongée; Cette conversation a été Déplacé pour discuter .