WCF服务返回列表。需要在一个Json字符串中返回2个对象

时间:2013-01-24 14:39:11

标签: c# json wcf

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

我已经在这个问题上苦苦挣扎了很长时间。

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

2 个答案:

答案 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返回。