1

这是我的第一个堆栈溢出帖子,所以让我放松一下:)。

我一直在努力解决这个问题。

目前我的 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);
4

2 回答 2

1

您需要返回一个同时包含列表和成功属性的对象,而不是直接返回列表。将 JSON 中的每一组花括号视为需要创建的新对象/类,并且以逗号分隔的所有内容都视为该对象的属性。因此,您的外部花括号需要由具有两个属性(shoppinglistitemsResult 和 success)的类表示。对于列表中的所有项目,您都需要第二堂课。

这是一种使用泛型实现此目的的方法。我还冒昧地包含了一些您可能想要使用的附加属性。对于不需要返回值但可能希望返回成功或错误消息的操作,我还包含了一个没有“结果”的响应类型。

[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();
于 2013-01-24T16:01:25.737 回答
0

然后构建一个包含作为成员的列表和您需要的额外对象的类,并将该类的实例作为 json 返回。

于 2013-01-24T14:48:01.967 回答