2016-02-26 45 views
9

我有一个包含电子邮件地址和状态数据成员的类对象列表。我试图将这些转换为json,确保在数组中有“操作”字。将对象列表转换为json数组

这是我的课:

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": "[email protected]", 
     "status": "good2go" 
    }, 
    { 
     "email_address": "[email protected]", 
     "status": "good2go" 
    },... 
    ] 
} 

EDIT1 我应该提到我得到的数据来自数据库。我从数据库反序列化一个JSON并以几种不同的方式使用这些数据,所以我不能更改我的类的成员名称。

+0

什么是你实际上得到? – Arpit

+0

为什么你对匿名对象感到厌烦?使用datacontrat代替或名称属性http://www.newtonsoft.com/json/help/html/JsonPropertyName.htm – cdie

+0

@ Arpit最近我得到的是没有数组之前的操作字符串相同的输出。 – Blankdud

回答

11

我相信这会给你你想要的。你将不得不改变你的类属性名称如果可能的话 -

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

     List<MyClass> data = new List<MyClass>() { new MyClass() { email_address = "[email protected]", status = "good2go" }, new MyClass() { email_address = "[email protected]", status = "good2go" } }; 
     var json = JsonConvert.SerializeObject(new 
     { 
      operations = data 
     }); 
+0

经过一些调整,这是我的解决方案。谢谢,感谢。 – Blankdud

+1

什么,如果我不想在数据或操作开始? –

+1

@HafizH如果你不想在开始时使用“操作”,只需执行:var json = JsonConvert.SerializeObject(operations) – Valip

0

你可以用这样的尝试:

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