6

我是 json 格式的新手。我想使用 C# 和 json.net 包创建以下 json 字符串。

这是我的目标 Json 格式:

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

在这里,我存储每个学生的问题。但有时,学生的总数可能会有所不同。例如,它可能只是 s1,s2 或 s1,s2,s3,s4.... 这是在 C# 运行时计算的。所以,我想根据学生列表创建 json 字符串......

请指导我摆脱这个问题?

4

3 回答 3

15

json有点奇怪,就像学生是“GetQuestion”对象的属性一样,应该很容易成为List.....

关于您可以使用的库是。

可能还有更多,但这就是我用过的

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

有了 Dictionary 就如你所愿......

{
      "GetQuestions":
       {
              "s1":"Q1,Q2",
              "s2":"Q1,Q2,Q3",
              "s3":"Q1,Q2,Q4",
              "s4":"Q1,Q2,Q4,Q6"
       }
 }
于 2013-02-12T09:04:25.443 回答
11

不需要 JSON.NET 包。你可以使用JavaScriptSerializer. 该Serialize方法会将托管类型实例转换为 JSON 字符串。

var serializer = new JavaScriptSerializer();
var json = serializer.Serialize(instanceOfThing);
于 2013-02-12T08:41:11.577 回答
6

要将任何对象或对象列表转换为 JSON,我们必须使用函数 JsonConvert.SerializeObject。

下面的代码演示了 JSON 在 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;
    }
}  

运行此程序后,您将收到两个警报

在上面的示例中,我们创建了一个 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);   

因此,尝试使用 Questions 创建一个数组列表,然后将此列表序列化为 JSON

于 2013-02-12T08:52:37.247 回答