在API中为JSON响应添加外部名称

时间:2017-05-19 17:40:35

标签: c# json

我编写了一个以JSON格式返回数据的API。

回复如下:

[{"leadID":1,"eventID":2,"companyID":3},{"leadID":4,"eventID":5,"companyID":6}]

但对我来说并不理想,我想在这个系列中添加一个名字。

理想情况下,我希望输出如下:

{"data":[{"leadID":1,"eventID":2,"companyID":3},{"leadID":4,"eventID":5,"companyID":6}]}

我的行动是:

public HttpResponseMessage GetLeadsSinceLastPoll()
{
    using (var context = new MyDbContext())
    {
        var leads = context.Lead.Where(q => q.dateAdded > AuthorizedUser.LastPollDate).ToList();
        var x = JsonConvert.SerializeObject(leads);
        var res = Request.CreateResponse(HttpStatusCode.OK);
        res.Content = new StringContent(x, System.Text.Encoding.UTF8, "application/json");
        return res;
    }
}

有没有办法在结果中添加外部名称/标签?

2 个答案:

答案 0 :(得分:1)

如果您希望leads成为对象的data属性,那很简单:只需创建一个这样的对象,然后对其进行序列化。通过序列化,它总是最好操纵对象,而不是序列化文本。一个未转义的引号可能会造成严重破坏。你不想在这些细节上纠缠不清。

var obj = new { data = leads };
var x = JsonConvert.SerializeObject(obj);

或者如果您使用的旧版C#(< C#4)不支持匿名类型:

var dict = new Dictionary<String, Object>();

dict["data"] = leads;

x = JsonConvert.SerializeObject(dict);

或者,如果你想要一些如此快速和肮脏的东西,实际上需要更长的时间:

var x = JsonConvert.SerializeObject(leads);

x = $@"{{""data"":{x}}}";

答案 1 :(得分:0)

创建两个类 1类是2类对象的列表

public class Objects
{
    public List<Object1> data;
}

public class Object1
{
    public int LeadID;
    public int EventID;
    public int CompanyID;
}

将项目添加到列表中,如下所示:

Objects ObjectList = new Objects()
{
    data= new List<Object1>()
};

Object1 object= new Object1()
{
    LeadID = 1,
    EventID = 2,
    CompanyID = 3
};

ObjectList.data.Add(object);

将ObjectList转换为Json:

string jsonTxt = JsonConvert.SerializeObject(ObjectList);