将列表转换为json格式 - 快速简便的方法

时间:2011-06-16 01:12:47

标签: c# asp.net

假设我有一个对象MyObject,如下所示:

public class MyObject
{
  int ObjectID {get;set;}
  string ObjectString {get;set;}
} 

我有一个MyObject列表,我希望将它转换为带有stringbuilder的json字符串。我知道如何创建一个JavascriptConverter并通过传递一个列表并让转换器构建字符串来创建一个json字符串但在这种特殊情况下我希望避免开销并直接转到列表中带有foreach循环的json字符串像这样:

StringBuilder JsonString = new StringBuilder();

foreach(MyObject TheObject in ListOfMyObject)
{

}

我尝试通过附加逗号和引号来使用此方法,但尚未解决。

感谢您的建议。

8 个答案:

答案 0 :(得分:51)

我在使用JavaScript serialization class

之前做过类似的事情
using System.Web.Script.Serialization;

JavaScriptSerializer jss = new JavaScriptSerializer();

string output = jss.Serialize(ListOfMyObject);
Response.Write(output);
Response.Flush();
Response.End();

答案 1 :(得分:37)

3年后的经验,我回到这个问题并建议写这样:

string output = new JavaScriptSerializer().Serialize(ListOfMyObject);

一行代码。

答案 2 :(得分:17)

对我来说,它使用了Newtonsoft.Json:

using Newtonsoft.Json;
// ...
var output = JsonConvert.SerializeObject(ListOfMyObject);

答案 3 :(得分:7)

我会避免滚动你自己并使用:

System.Web.Script.JavascriptSerializer

JSON.net

两者都会做得很好:)

答案 4 :(得分:3)

我更喜欢使用JSON.NET框架的linq-to-json功能。以下是如何将对象列表序列化为json。

List<MyObject> list = new List<MyObject>();

Func<MyObject, JObject> objToJson =
    o => new JObject(
            new JProperty("ObjectId", o.ObjectId), 
            new JProperty("ObjectString", o.ObjectString));

string result = new JObject(new JArray(list.Select(objToJson))).ToString();

您完全控制结果json字符串中的内容,并且您只需查看代码即可清楚地看到它。当然,您可以摆脱Func<T1, T2>声明并直接在new JArray()调用中指定此代码,但将此代码提取到Func<>,它看起来更清晰,实际上你是如何实际的将您的对象转换为json。您甚至可以将Func<>存储在此方法之外的某种设置方法中(即在构造函数中)。

答案 5 :(得分:2)

为什么重新发明轮子?使用microsoft's json serialize或第三方库,例如json.NET

答案 6 :(得分:1)

如果您使用的是 WebApi,HttpResponseMessage 是一种更优雅的方式

public HttpResponseMessage Get()
{
    return Request.CreateResponse(HttpStatusCode.OK, ListOfMyObject);
}

答案 7 :(得分:0)

您可以使用返回值 返回JsonConvert.SerializeObject(objName); 并将其发送到前端