将对象列表转换为JSON数组

13

我有一个类对象列表,它们具有电子邮件地址和状态数据成员。我正在尝试将它们转换为json,确保在数组上有“operations”一词。

这是我的类:

class MyClass
{
    public string email {get; set; }
    public string status { get; set; }
}
这是我的当前代码(无法编译):

这是我的当前代码(不可构建):

List<MyClass> data = new List<MyClass>();
data = MagicallyGetData();

string json = new {
     operations = new {
          JsonConvert.SerializeObject(data.Select(s => new {
               email_address = s.email,
               status = s.status
          }))
     }
};

这是我试图获取的JSON:

{
  "operations": [
    {
      "email_address": "email1@email.com",
      "status": "good2go"
    },
    {
      "email_address": "email2@email.com",
      "status": "good2go"
    },...
  ]
}

编辑1 我应该提到,获取这些数据的方式是从数据库中取得。我正在将JSON从数据库反序列化,并且以多种不同的方式使用这些数据,因此我不能更改我的类成员名称。


你实际上得到了什么? - Arpit
为什么要用匿名对象来烦恼自己?使用DataContract或者Name属性更好。详见http://www.newtonsoft.com/json/help/html/JsonPropertyName.htm。 - cdie
@ Arpit 我最接近的结果是在数组之前没有操作字符串时得到相同的输出。 - Blankdud
我假设这是使用Newtonsoft的Json.NET完成的。 - surfmuggle
4个回答

13

我相信这会给你想要的。如果可能的话,你需要更改你的类属性名称。

考虑到这个类:

class MyClass
{
   public string email_address { get; set; }
   public string status { get; set; }
}

您可以将对象添加到列表中

List<MyClass> data = new List<MyClass>()
{ 
   new MyClass(){email_address = "e1@it.io", status = "s1"}
   , new MyClass(){ email_address = "e2@it.io", status = "s1"}
};
使用匿名类型,您可以将data分配给属性operations
var json = JsonConvert.SerializeObject(new
{
   operations = data
});

经过一些微调,这就是我采用的解决方案。谢谢,感激不尽。 - Blankdud
1
如果我不想在开头使用数据或操作,该怎么办? - Hafiz H
1
@HafizH 如果你不想在开头加上“operations”,只需执行以下操作:var json = JsonConvert.SerializeObject(operations) - Valip

4
class MyClass
{
     public string email_address { get; set; }
     public string status { get; set; }
}

List<MyClass> data = new List<MyClass>() { new MyClass() { email_address = "email1@email.com", status = "good2go" }, new MyClass() { email_address = "email2@email.com", status = "good2go" } };

//Serialize
var json = JsonConvert.SerializeObject(data);

//Deserialize
var jsonToList = JsonConvert.DeserializeObject<List<MyClass>>(json);

0
你可以尝试像这样做:

using System.Web.Script.Serialization;
var jsonSerialiser = new JavaScriptSerializer();
var json = jsonSerialiser.Serialize(data);

-1

这是简单的代码

JArray.FromObject(objList);


为了更好地理解您的回答,需要更多详细信息。目前看来,这似乎行不通。 - surfmuggle

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接