2016-06-23 18 views
-1

私はasp.net webapiを開発し、それを使ってテストしています。以下に示すように、私は応答を取得しています:Webapi JSONからjsonレスポンスの名前を取得する方法

代わりにこの

{ 
    "name":"A", 
    "age":"B" 
} 

のそれは以下のように変更することができますか?

User{ 
    "name":"A", 
    "age":"B" 
} 

しかし、JSONからの応答ではなく、私はカスタム名を持っています。誰もこれを達成する方法を助けることができますか?あなたは「ラッパー」または「コンテナ」クラスのあなたの応答をラップしたいように見える

おかげ

+0

「カスタム名」はどういう意味ですか?それはJSONではありません。 – Utkanos

+0

名前を取得するためにレスポンスをクラスにラップする必要がありますか? –

+2

'{" User ":{...}}'か、意図的に無効なJSONを返そうとしていますか?前者の場合、「はい」の場合は、1つのプロパティを含む「ラッパー」または「コンテナ」クラスを導入してください: 'public User User {get;セット; } '。 – CodeCaster

答えて

2

。あなたの現在のクラスおよび応答は次のようになります考える:

public class User 
{ 
    public string Name { get; set; } 
    public int Age { get; set; } 
} 

public User Get(int id) 
{ 
    return _userRepository.Find(id); 
} 

その後、あなたは単に、このラッパークラスを追加することができます。

public class UserContainer 
{ 
    public User User { get; set; } 
} 

そして、あなたのコントローラでラップ:

public UserContainer Get(int id) 
{ 
    var user = _userRepository.Find(id); 
    return new UserContainer 
    { 
     User = user 
    } 
} 

これが作るだろうあなたの応答は次のようになります:

{ 
    "User" : 
    { 
     "Name" : "Foo", 
     "Age" : 42 
    } 
} 

しかし、これは意味上必要ないことに注意してください。クライアントはすでに/api/user/42エンドポイントを呼び出しているため、ユーザーが元気になると期待しています。そのことをJSONで再度指定する必要はありません。

+0

ありがとうございます。私は配列としてユーザーを返す場合私は使用することができると思う。その場合、他のプロパティとは別に、このユーザー名を除外してカメルケースのものを除外できますか? –

+0

'[JsonProperty]'を使ってプロパティの名前を変更することができ、配列のラッパーも必要ありません。 'IEnumerable 'を返してください。 – CodeCaster

+0

ありがとうございました。 –

関連する問題