假设我有一个对象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)
{
}
我尝试通过附加逗号和引号来使用此方法,但尚未解决。
感谢您的建议。
答案 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)
答案 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); 并将其发送到前端