c# - 如何返回 JSON 对象

标签 c# json json.net

我正在使用一个 jQuery 插件,它需要一个具有以下结构的 JSON 对象(我将从数据库中检索值):

{ results: [
    { id: "1", value: "ABC", info: "ABC" },
    { id: "2", value: "JKL", info: "JKL" },
    { id: "3", value: "XYZ", info: "XYZ" }
] }

这是我的课:

public class results
{
    int _id;
    string _value;
    string _info;

    public int id
    {
        get
        {
            return _id;
        }
        set
        {
            _id = value;
        }
    }
    public string value
    {
        get
        {
            return _value;
        }
        set
        {
            _value = value;
        }
    }
    public string info
    {
        get
        {
            return _info;
        }
        set
        {
            _info = value;
        }
    }
}

这是我序列化的方式:

results result = new results();
result.id = 1;
result.value = "ABC";
result.info = "ABC";
string json = JsonConvert.SerializeObject(result);

但这只会返回一行。你能帮我返回一个以上的结果吗?我怎样才能得到上面指定格式的结果?

最佳答案

首先,有no such thing as a JSON object .你的问题是一个 JavaScript 对象字面量(参见 here 以获得关于差异的精彩讨论)。以下是您将如何将您拥有的内容序列化为 JSON 的方法:

我会使用一个匿名类型填充你的 results 类型:

string json = JsonConvert.SerializeObject(new
{
    results = new List<Result>()
    {
        new Result { id = 1, value = "ABC", info = "ABC" },
        new Result { id = 2, value = "JKL", info = "JKL" }
    }
});

另外,请注意,生成的 JSON 的结果项的 id 类型为 Number,而不是字符串。我怀疑这会是一个问题,但是在 C# 中将 id 的类型更改为 string 很容易。

我还会调整您的 results 类型并去掉支持字段:

public class Result
{
    public int id { get ;set; }
    public string value { get; set; }
    public string info { get; set; }
}

此外,类通常是 PascalCased 而不是 camelCased

这是从上面的代码生成的 JSON:

{
  "results": [
    {
      "id": 1,
      "value": "ABC",
      "info": "ABC"
    },
    {
      "id": 2,
      "value": "JKL",
      "info": "JKL"
    }
  ]
}

关于c# - 如何返回 JSON 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16441880/

相关文章:

json.net - ASP.NET Core MVC - 将 JSON 发送到服务器时为空字符串

c# - 使用 ArraySegment 类到 JSON 对象

c# - 创建一个新的 AnonymousType 实例

c# - UWP - 获取 IMSI 和 IMEI

c# - 为什么核心类型只实现了部分接口(interface)?

c# - 与 System.Windows.Forms.Timer 的间隔不一致

c# - 为什么 Dispatcher.Invoke 不触发 UI 更新?

python - for循环将相同的值加在一起并制作JSON格式

java - 将字符串日期转换为对象会产生无效的时区指示符 '0'

java - Jackson - 动态抑制属性的序列化(写入)