0
votes

Comment accéder et stocker un objet particulier à partir d'un fichier JSON en C #

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;
} 


1 commentaires

Les commentaires ne sont pas pour une discussion prolongée; Cette conversation a été Déplacé pour discuter .


4 Réponses :


0
votes

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 [sérialisable] code>.

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>

path = Application.dataPath + "/QnA.json";
    string json = File.ReadAllText(path);
    Course scienceCourse = JsonUtility.FromJson<Course>(json); //notice the name of the variable!


2 commentaires

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



0
votes

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>();


0 commentaires

0
votes

Utiliser science = {...} Pour définir votre objet est où vous êtes confus sur les définitions d'objet. Ce n'est pas un objet science . C'est un objet objet .

Il devrait être plus similaire à xxx

envelopper avec: xxx

et utiliser xxx

pour le maintenir en tant qu'objet C #.

à partir d'ici, vous pouvez accéder à vos cours par quiz. Cours [0] .Questions [17] ou écrire des méthodes d'assistant en classe de Quiz pour appeler des cours par Enums comme Quiz.getcourse (CourseCategory.Science) .Questions [8] .

Je suggère également d'utiliser questions au lieu de question_data . C'est plus sympathique et vous aide sémantiquement.

comme une suggestion supplémentaire, au lieu de dévoiler tout le quiz dans un seul JSON, vous pouvez envisager d'envoyer un seul Objet Selon Sur le parcours, demandé à l'aide d'une requête comme http://myquizserver.com/quiz.php?course=science . Puisque vous avez mentionné des centaines de lignes de Json, vous pouvez également envisager d'obtenir une question de données par la question.


1 commentaires

Vous n'avez pas besoin de l'envelopper avec un nom Quiz Les noms de classe ne comptent pas vraiment pour la désérialisation, il pourrait également être Données de la classe publique 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 {....}



2
votes

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;


0 commentaires