web-dev-qa-db-ja.com

C#を使用してjson文字列を作成する方法

私はjson形式を初めて使用します。 C#とjson.netパッケージを使用して、次のjson文字列を作成します。

これは私のターゲットJson形式です。

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

ここでは、各生徒の質問を保存しています。ただし、生徒の総数が異なる場合もあります。たとえば、s1、s2のみ、またはs1、s2、s3、s4などです。これは、C#の実行時に計算されます。だから、私は学生のリストに応じてjson文字列を作成したい...

この問題から抜け出すために私を案内してください?

6
Saravanan

Jsonはちょっと変です、それは受講者が「GetQuestion」オブジェクトのプロパティのようなもので、リストにするのは簡単です...

使用できるライブラリについては。

そしてもっとたくさんあるかもしれませんが、それは私が使用したものです

Jsonについて私は今このようなものではないかもしれません

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

結果はこれです

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

はい、私はjsonが異なることを知っていますが、辞書で必要なjsonです。

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

そして、辞書はあなたがそれを望んでいるように.....

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

JSON.NETパッケージは実際には必要ありません。 JavaScriptSerializer を使用できます。 Serialize method は、マネージタイプのインスタンスをJSON文字列に変換します。

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

オブジェクトまたはオブジェクトリストをJSONに変換するには、関数JsonConvert.SerializeObjectを使用する必要があります。

以下のコードは、ASP.NET環境でのJSONの使用を示しています。

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

このプログラムを実行すると、2つのアラートが表示されます

上記の例では、Employeeオブジェクトのリストを作成し、それを関数 "JsonConvert.SerializeObject"に渡しました。この関数(JSONライブラリ)は、オブジェクトリストをJSON形式に変換します。 JSONの実際の形式は、以下のコードスニペットで確認できます。

{ "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 }
                           ] 
            } 

構文:

  • {}-「コンテナ」として機能

  • []-配列を保持します

  • :-名前と値はコロンで区切られます

  • 、-配列要素はコンマで区切られます

このコードは、C#2.0を使用してJSONを作成し、ASPXページで使用する中間プログラマーを対象としています。

JavaScriptの末尾からJSONを作成できますが、オブジェクトのリストをC#から同等のJSON文字列に変換するにはどうしますか。それが私がこの記事を書いた理由です。

C#3.5では、JavaScriptSerializerという名前のJSONの作成に使用される組み込みクラスがあります。

次のコードは、そのクラスを使用してC#3.5でJSONに変換する方法を示しています。

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

つまり、質問を含む配列のリストを作成してから、このリストをJSONにシリアル化してください

6
fibertech