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

C# 将列表转换为json格式-快速简便的方法,c#,asp.net,C#,Asp.net,假设我有一个对象MyObject,看起来像这样: public class MyObject { int ObjectID {get;set;} string ObjectString {get;set;} } StringBuilder JsonString = new StringBuilder(); foreach(MyObject TheObject in ListOfMyObject) { } string output = new JavaScriptSeriali

假设我有一个对象MyObject,看起来像这样:

public class MyObject
{
  int ObjectID {get;set;}
  string ObjectString {get;set;}
} 
StringBuilder JsonString = new StringBuilder();

foreach(MyObject TheObject in ListOfMyObject)
{

}
string output = new JavaScriptSerializer().Serialize(ListOfMyObject);
我有一个MyObject的列表,我希望用stringbuilder将其转换为json字符串。我知道如何创建JavascriptConverter并通过传递列表创建json字符串,并让转换器生成字符串,但在这种特殊情况下,我希望避免开销,直接使用json字符串,列表上有一个foreach循环,如下所示:

public class MyObject
{
  int ObjectID {get;set;}
  string ObjectString {get;set;}
} 
StringBuilder JsonString = new StringBuilder();

foreach(MyObject TheObject in ListOfMyObject)
{

}
string output = new JavaScriptSerializer().Serialize(ListOfMyObject);
我曾尝试通过添加逗号和引号来使用此方法,但还没有成功


谢谢您的建议。

我会避免使用您自己的滚动,并使用以下任一选项:


两者都会做得很好:)

为什么要重新发明轮子?使用或使用第三方库,如

在使用之前,我做了如下操作:

以及:


我更喜欢使用框架的linq到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();
List List=新列表();
Func objToJson=
o=>newjobject(
新产权(“ObjectId”,o.ObjectId),
新的JProperty(“ObjectString”,o.ObjectString));
字符串结果=newjobject(newjarray(list.Select(objToJson))).ToString();

您可以完全控制结果json字符串中的内容,只需查看代码就可以清楚地看到它。当然,您可以去掉
Func
声明,直接在
new JArray()
调用中指定此代码,但将此代码提取到
Func
后,看起来更清楚发生了什么,以及您实际如何将对象转换为json。您甚至可以将您的
Func
存储在此方法之外的某种设置方法中(即在构造函数中)。

3年的经验之后,我回到这个问题上来,建议您这样编写:

public class MyObject
{
  int ObjectID {get;set;}
  string ObjectString {get;set;}
} 
StringBuilder JsonString = new StringBuilder();

foreach(MyObject TheObject in ListOfMyObject)
{

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

一行代码。

对我来说,使用Newtonsoft.Json是有效的:

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

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

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

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

我很高兴看到这样的答案。那一年,我们只是困惑的孩子。几年后,对我们来说,以前看起来如此重要和困难的事情变得如此简单和无关紧要,因为我们成长了,但问题仍然是一样的:-)我同意这种方法,因为定制对象通常只需要ID和标签。但是,我想指出,上面的代码生成了一个错误。包装JArray的JObject是不必要的,并抛出一个错误“无法将Newtonsoft.Json.Linq.JArray添加到Newtonsoft.Json.Linq.JObject。”@MatthewT.Baker我认为这不正确。它在麻省理工学院的许可证()下,所以不需要任何费用。奇怪的是,各州的情况有所不同。除非我不理解许可条款?@MatthewT.Baker这似乎是for,这与核心不同。如果你有2个ListOfMyObject呢?如何将这两个列表转换为对象的json数组您可以将这两个列表放在一个列表中,然后执行上面的操作:ListOfMyObject.AddRange(MyOtherListOfMyObject);Response.ContentType=“application/json;charset=utf-8”;写之前的这一行使它在firefox和chromeNote中更具可读性,在WPF项目中,您需要添加对
System.Web.Extensions
的引用以使用
System.Web.Script.Serialization