我将列表序列化为JSON,我可以通过我的Web服务返回。
List<grabb> timeline = new List<grabb>();
for (int i = 0; i < ds.Tables[0].Rows.Count;i++)
{
grabb thisGrabb = new grabb();
thisGrabb.grabbImage = ds.Tables[0].Rows[i]["graphimage"].ToString();
thisGrabb.grabbURL = ds.Tables[0].Rows[i]["sURL"].ToString();
thisGrabb.grabbText = ds.Tables[0].Rows[i]["quote"].ToString();
thisGrabb.grabbSource = ds.Tables[0].Rows[i]["source"].ToString();
thisGrabb.grabbDomainLink = ds.Tables[0].Rows[i]["domainlink"].ToString();
thisGrabb.grabbCreateDate = ds.Tables[0].Rows[i]["createdate"].ToString();
thisGrabb.grabbPoster = ds.Tables[0].Rows[i]["username"].ToString();
thisGrabb.grabbPosterLink = ds.Tables[0].Rows[i]["userlink"].ToString();
timeline.Add(thisGrabb);
}
string json = JsonConvert.SerializeObject(timeline, Formatting.Indented);
this.Context.Response.ContentType = "application/json; charset=utf-8";
this.Context.Response.Write(json);
但是,虽然这是一个数组,但我不知道如何设置字典名称。我希望它能返回类似
的内容[
{ "timeline" :
{
// first list item data in json format
},
{
//next list item data in json format}
}
}
]
而目前它返回:
[
{
// first list item data in json format
},
{
//next list item data in json format}
}
]
我错过了什么?
答案 0 :(得分:4)
您正在查询列表。这将导致一个数组。尝试使用容器类(在示例中作为匿名类):
%20
结果将是:
string json = JsonConvert.SerializeObject(new { timeline = timeline }, Formatting.Indented);
您问题中的所需结果无效JSON。
答案 1 :(得分:2)
您不能拥有您描述的结构,因为它不是合法的JSON:
[ { "timeline" : { item 1 }, { item 2 } } ]
// ^
// Error
您想要的结构在:
{ "timeline" : [ { item 1 }, { item 2 } ] }
// ^^^^^^^^^^^^^^^^^^^^^^^^^^
// Your code already produces this part
您可以通过将timeline
列表添加到string
到object
词典来实现此效果。
答案 2 :(得分:1)
你可以像这样创建一个匿名对象:
var ao = new { timeline: timeline }
string json = JsonConvert.SerializeObject(ao, Formatting.Indented);
答案 3 :(得分:1)
您还可以在Web服务中设置响应集的名称。 假设您有一个简单的请求/响应合同,您可以使用MessageParameterAttribute设置响应的名称:
[ServiceContract]
public interface IService
{
...
[OperationContract]
[WebInvoke(Method = "POST",
ResponseFormat = WebMessageFormat.Json,
RequestFormat = WebMessageFormat.Json,
BodyStyle = WebMessageBodyStyle.Wrapped)]
[return: MessageParameter(Name = "timeline")]
Entity DoWork(Entity entity);
...
}