这是我的第一个堆栈溢出帖子,所以让我有些松懈:)。
我已经在这个问题上苦苦挣扎了很长时间。
目前,我的WCF从数据库中读取数据并将其作为JSON返回。
它的外观如下:
{
"shoppinglistitemsResult": [
{
"description": "this is my notes description",
"name": "mynotename",
"pid": "1",
"status": "1",
"username": "test"
}
]
}
我希望它看起来像这样:
{
"shoppinglistitemsResult": [
{
"description": "123",
"name": "123",
"pid": "123",
"status": "123",
"username": "test"
}
],
"success": 1
}
最后有额外的对象。
[OperationContract]
[WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = "displayAllNotes?name={username}&pass={password}")]
List<Service1.wsNotes> shoppinglistitems(string username, string password);
答案 0 :(得分:1)
您需要返回一个包含list和success属性的对象,而不是直接返回列表。将JSON中的每组花括号都想象成需要创建的新对象/类以及以逗号分隔为该对象上的属性的所有内容。因此,您的外部花括号需要由具有两个属性(shoppinglistitemsResult和success)的类表示。您需要为列表中的所有项目安排第二课。
以下是使用泛型的方法。我也冒昧地包含了一些您可能想要使用的其他属性。我还包括一个没有&#34;结果&#34;的响应类型。对于不需要返回值但可能希望返回成功或错误消息的操作。
[DataContract]
public class Response : IExtensibleDataObject
{
public Response()
{
Success = true;
ErrorMessage = null;
}
[DataMember]
public bool Success { get; set; }
[DataMember]
public string ErrorMessage { get; set; }
public ExtensionDataObject ExtensionData { get; set; }
}
[DataContract]
public class Response<TResult> : Response
{
[DataMember]
public TResult Result { get; set; }
}
然后你的操作合同会是这样的......
[OperationContract]
[WebInvoke(Method = "GET", ResponseFormat = WebMessageFormat.Json, BodyStyle = WebMessageBodyStyle.Wrapped, UriTemplate = "displayAllNotes?name={username}&pass={password}")]
Response<List<Notes>> GetShoppingListItems();
答案 1 :(得分:0)
然后构建一个类,其中包含列表和所需的额外对象作为成员,并将该类的实例作为json返回。