如何返回 JSON 对象
Posted
技术标签:
【中文标题】如何返回 JSON 对象【英文标题】:How to return JSon object 【发布时间】:2013-05-02 18:06:36 【问题描述】:我正在使用一个 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);
但这只会返回一行。你能帮我返回一个以上的结果吗?我怎样才能得到上面指定格式的结果?
【问题讨论】:
您的result
变量是单个项目,而不是集合。如果你想要一个项目数组,你需要一个集合。
你可以看看这个链接***.com/questions/6201529/…
james.newtonking.com/projects/json/help/index.html?topic=html/…
@nercan:这与他的问题无关。他正在使用 James Newton-King 的插件。
【参考方案1】:
首先是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
s 类型的 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"
]
【讨论】:
我会将 ID 保留为int
或代码中有意义的任何内容;无论哪种方式,Javascript 通常都可以很好地处理它们,因此您不妨尽可能利用强类型。 .ToString()
如果需要作为传输字符串,则始终存在。
@anaximander:确实如此。我个人也更喜欢int
。我会改回来并记下。感谢您的反馈!
@AndrewWhitaker:您发布的代码无法编译。它给出的错误为“预期类型”、“;预期”、“无效的表达式术语 ','”、“新的表达式需要 () 或 [] 在类型之后”和“无效的表达式术语 ()”
@user1640256:您使用的是什么版本的 .NET 框架?【参考方案2】:
您只有一行要序列化。尝试这样的事情:
List<results> resultRows = new List<results>
resultRows.Add(new resultsid = 1, value="ABC", info="ABC");
resultRows.Add(new resultsid = 2, value="XYZ", info="XYZ");
string json = JavaScriptSerializer.Serialize(new results = resultRows);
编辑以匹配 OP 的原始 json 输出
** 编辑 2:对不起,但我错过了他使用 JSON.NET。使用JavaScriptSerializer
上面的代码会产生这个结果:
"results":["id":1,"value":"ABC","info":"ABC","id":2,"value":"XYZ","info":"XYZ"]
【讨论】:
这不会生成 OP 所要求的内容——他正在生成一个具有单个属性results
的 object,而不是结果数组。
这不会产生 OP 要求的结果,它缺少具有 results
属性的对象。
如果 OP 希望输出结果,但他的根节点称为 results
否,results 变量的类型为 results
,resultRows 的类型为 List<T>
。
@ShaneBlake-我使用的是 .net framework 2.0 所以 System.Web.Extension 命名空间不可用。以上是关于如何返回 JSON 对象的主要内容,如果未能解决你的问题,请参考以下文章
如何通过 ajax php 调用返回包含 json 对象的数组/json 对象?