【问题标题】:How to create my json string by using C#?如何使用 C# 创建我的 json 字符串?
【发布时间】:2013-02-12 08:38:54
【问题描述】:

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

这是我的目标 Json 格式:

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

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

请指导我摆脱这个问题?

【问题讨论】:

标签: c# asp.net json c#-4.0 json.net


【解决方案1】:

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

【讨论】:

  • 非常感谢。我通过向其中添加元素(使用 Add 方法)在 GetQuestions Dictionary 中获得了该信息。实际上,格式略有变化。 { GetQuestions:[ { "s1":"Q1,Q2", "s2":"Q3,Q4", "s3":"Q5,Q6", } ] } 你能帮我解决这个问题吗...跨度>
  • 很好的答案!但是,我对“转储”感到困惑。我挖了一些挖,发现你可以这样做:JsonConvert.SerializeObject(gq, Formatting.Indented);,它不需要任何疯狂。
  • 如何使用循环添加多个元素?我有来自用户的多个输入。你能推荐我吗?
  • 我认为这应该是另一个问题,而不是“污染”答案的 cmets。但无论如何,如果您有多个输入,您可以使用Add 方法将值添加到DictionaryList,例如Dictionary GetQuestions.Add("s1", "Q1,Q2")
【解决方案2】:

不需要 JSON.NET 包。你可以使用JavaScriptSerializerSerialize method 会将托管类型实例转换为 JSON 字符串。

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

【讨论】:

    【解决方案3】:

    要将任何对象或对象列表转换为 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的实际格式可以在下面的代码sn-p中查看:

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

    【讨论】:

    • 专业提示:对于示例演示代码,请针对控制台窗口或单元测试。不是网页。让他们 - 容易 - 测试/尝试,你的答案。
    猜你喜欢
    • 1970-01-01
    • 2010-11-06
    • 2013-12-05
    • 1970-01-01
    • 2017-01-04
    • 2013-03-09
    • 2023-03-16
    • 1970-01-01
    相关资源
    最近更新 更多