ASP.NET& Json - 简单的层次结构

时间:2014-05-20 16:23:17

标签: asp.net json

我有一个简单的ASP.NET类,有4个属性。我想要的是将这个类打包成一个JSON字符串并添加一个"数据"最高级别的父母。什么是添加"数据的最佳方式"顶级元素?

using Newtonsoft.Json;
[DataContract]
public class Task
{
    [DataMember(Name = "name")]
    public string Name { get; set; }

    [DataMember(Name = "notes")]
    public string Notes { get; set; }

}

static void Main(string[] args)
{
     var task = new Task();
     task.Name = "Test Task";
     task.Notes = "Test task created by ASP.NET";
     HttpClient client = new HttpClient();
     client.BaseAddress = new Uri("https://example.com/api");

     HttpResponseMessage response = client.PostAsJsonAsync<Task>("tasks", task).Result;

     response.EnsureSuccessStatusCode();
     string responseBody = response.Content.ReadAsStringAsync().Result;
     Console.WriteLine(responseBody);
     Console.ReadLine();
}

我从这段代码回来的Json如下:

{
   "name": "Test Task",
   "notes": "Test task created by ASP.NET",
}

我想要的是以下内容:

{
    "data": {
    {
       "name": "Test Task",
       "notes": "Test task created by ASP.NET",
    }
}

2 个答案:

答案 0 :(得分:1)

你可以创建一个简单的字典:

public class Task
{
    public Task
    {
       Data = new Dictionary<string,string>();
    }
   [DataMember(Name = "data")]
   public Dictionary<string,string> Data { get; private set; }

}

填充如:

Task t =new Task();
t.Data.Add("name","test task");
t.Data.Add("notes","teet");

是的,您可以创建另一个类并将其嵌入:

public class Data
{
  [DataMember(Name = "name")]
  public string Name { get; set; }

  [DataMember(Name = "notes")]
  public string Notes { get; set; }
}

public class Task
{
    public Task
    {
       Data = new Data();
    }
   [DataMember(Name = "data")]
   public Data Data { get; private set; }

}

您可以将泛型用于抽象的Data

public class Task<T> where T: class , new()
{
  public Task
  {
     Data = new T();
  }

  [DataMember(Name = "data")]
  public T Data { get; private set; }

}

答案 1 :(得分:0)

如果您的服务提供商是wcf(我猜它是wcf),请将方法的BodyStyle更改为WebMessageBodyStyle.Bare,如下所述。

BodyStyle = WebMessageBodyStyle.Bare

它不会包装结果。