web-dev-qa-db-fra.com

Comment créer ma chaîne json en utilisant C #?

Je suis nouveau au format json. Je veux créer une chaîne json suivante en utilisant le package C # et json.net.

Voici mon format Json cible:

{
  "GetQuestions": 
  {
    "s1":"Q1,Q2",
    "s2":"Q1,Q3",
    "s3":"Q4,Q5"
  }
}

Ici, je stocke les questions de chaque étudiant.Mais parfois, le nombre total d'étudiants peut varier.Par exemple, il peut être s1, s2 uniquement ou s1, s2, s3, s4 .... Ceci est calculé lors de l'exécution en C #. Donc, je veux créer la chaîne json en fonction de la liste des étudiants ....

Veuillez me guider pour sortir de ce problème?

6
Saravanan

Le json est un peu bizarre, c'est comme si les étudiants sont des propriétés de l'objet "GetQuestion", ça devrait être facile d'être une List .....

À propos des bibliothèques que vous pourriez utiliser sont.

Et il pourrait y en avoir beaucoup plus, mais c'est ce que j'ai utilisé

À propos du json, je ne sais pas peut-être quelque chose comme ça

public class GetQuestions
{
    public List<Student> Questions { get; set; }
}

public class Student
{
    public string Code { get; set; }
    public string Questions { get; set; }
}

void Main()
{
    var gq = new GetQuestions
    {
        Questions = new List<Student>
        {
            new Student {Code = "s1", Questions = "Q1,Q2"},
            new Student {Code = "s2", Questions = "Q1,Q2,Q3"},
            new Student {Code = "s3", Questions = "Q1,Q2,Q4"},
            new Student {Code = "s4", Questions = "Q1,Q2,Q5"},
        }
    };

    //Using Newtonsoft.json. Dump is an extension method of [Linqpad][4]
    JsonConvert.SerializeObject(gq).Dump();
}

Linqpad

et le résultat est le suivant

{
     "Questions":[
        {"Code":"s1","Questions":"Q1,Q2"},
        {"Code":"s2","Questions":"Q1,Q2,Q3"},
        {"Code":"s3","Questions":"Q1,Q2,Q4"},
        {"Code":"s4","Questions":"Q1,Q2,Q5"}
      ]
 }

Oui, je sais que le json est différent, mais le json que vous voulez avec le dictionnaire.

void Main()
{
    var f = new Foo
    {
        GetQuestions = new Dictionary<string, string>
                {
                    {"s1", "Q1,Q2"},
                    {"s2", "Q1,Q2,Q3"},
                    {"s3", "Q1,Q2,Q4"},
                    {"s4", "Q1,Q2,Q4,Q6"},
                }
    };

    JsonConvert.SerializeObject(f).Dump();
}

class Foo
{
    public Dictionary<string, string> GetQuestions { get; set; }
}

Et avec Dictionary, c'est comme vous le voulez .....

{
      "GetQuestions":
       {
              "s1":"Q1,Q2",
              "s2":"Q1,Q2,Q3",
              "s3":"Q1,Q2,Q4",
              "s4":"Q1,Q2,Q4,Q6"
       }
 }
15
jjchiw

Pas vraiment besoin du package JSON.NET. Vous pouvez utiliser JavaScriptSerializer . La méthode Serialize transformera une instance de type géré en chaîne JSON.

var serializer = new JavaScriptSerializer();
var json = serializer.Serialize(instanceOfThing);
11
Grant Thomas

Pour convertir un objet ou une liste d'objets en JSON, nous devons utiliser la fonction JsonConvert.SerializeObject.

Le code ci-dessous illustre l'utilisation de JSON dans un environnement ASP.NET:

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using Newtonsoft.Json;
using System.Collections.Generic;

namespace JSONFromCS
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e1)
        {
            List<Employee> eList = new List<Employee>();
            Employee e = new Employee();
            e.Name = "Minal";
            e.Age = 24;

            eList.Add(e);

            e = new Employee();
            e.Name = "Santosh";
            e.Age = 24;

            eList.Add(e);

            string ans = JsonConvert.SerializeObject(eList, Formatting.Indented);

            string script = "var employeeList = {\"Employee\": " + ans+"};";
            script += "for(i = 0;i<employeeList.Employee.length;i++)";
            script += "{";
            script += "alert ('Name : ='+employeeList.Employee[i].Name+' 
            Age : = '+employeeList.Employee[i].Age);";
            script += "}";

            ClientScriptManager cs = Page.ClientScript;
            cs.RegisterStartupScript(Page.GetType(), "JSON", script, true);
        }
    }
    public class Employee
    {
        public string Name;
        public int Age;
    }
}  

Après avoir exécuté ce programme, vous recevrez deux alertes

Dans l'exemple ci-dessus, nous avons créé une liste d'objets Employee et l'avons transmise à la fonction "JsonConvert.SerializeObject". Cette fonction (bibliothèque JSON) convertira la liste d'objets au format JSON. Le format réel de JSON peut être consulté dans l'extrait de code ci-dessous:

{ "Maths" : [ {"Name"     : "Minal",        // First element
                             "Marks"     : 84,
                             "age"       : 23 },
                             {
                             "Name"      : "Santosh",    // Second element
                             "Marks"     : 91,
                             "age"       : 24 }
                           ],                       
              "Science" :  [ 
                             {
                             "Name"      : "Sahoo",     // First Element
                             "Marks"     : 74,
                             "age"       : 27 }, 
                             {                           
                             "Name"      : "Santosh",    // Second Element
                             "Marks"     : 78,
                             "age"       : 41 }
                           ] 
            } 

Syntaxe:

  • {} - agit comme des "conteneurs"

  • [] - contient des tableaux

  • : - Les noms et les valeurs sont séparés par deux points

  • , - Les éléments du tableau sont séparés par des virgules

Ce code est destiné aux programmeurs intermédiaires, qui souhaitent utiliser C # 2.0 pour créer JSON et utiliser dans les pages ASPX.

Vous pouvez créer du JSON à partir de la fin de JavaScript, mais que feriez-vous pour convertir la liste des objets en chaîne JSON équivalente à partir de C #. C'est pourquoi j'ai écrit cet article.

En C # 3.5, il existe une classe intégrée utilisée pour créer JSON nommée JavaScriptSerializer.

Le code suivant montre comment utiliser cette classe pour convertir en JSON en C # 3.5.

JavaScriptSerializer serializer = new JavaScriptSerializer()
return serializer.Serialize(YOURLIST);   

Donc, essayez de créer une liste de tableaux avec des questions, puis sérialisez cette liste en JSON

6
fibertech