我有一个简单的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",
}
}
答案 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
它不会包装结果。