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の中括弧のすべてのセットは、作成する必要のある新しいオブジェクト/クラスであり、コンマで区切られたすべてのものは、そのオブジェクトのプロパティと考えてください。したがって、外側の中括弧は、2つのプロパティ(shoppinglistitemsResultとsuccess)を持つクラスで表す必要があります。リスト内のすべてのアイテムに対して2番目のクラスが必要になります。

ジェネリックでこれを行う方法は次のとおりです。私はまた、あなたが使用したいと思うかもしれないいくつかの追加のプロパティを含めるために自由を取りました。また、値を返す必要はないが、成功またはエラーメッセージを返したい場合がある操作に対して、「結果」のない応答タイプを含めました。

[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

Then build a class that contains as members a list and the extra object you need and return an instance of that class as json.

于 2013-01-24T14:48:01.967 に答える