2016-06-23 63 views
-1

我開發了一個asp.net webapi並使用fiddler進行測試。我得到的迴應如下圖所示:Webapi如何有一個名稱的JSON響應,而不是從JSON開始

取而代之的是

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

是否可以更改如下?

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

但是,而不是以JSON開始的響應,我想有自定義名稱。任何人都可以幫助如何做到這一點?

感謝

+0

你是什麼意思「自定義名稱」?這不是JSON。 – Utkanos

+0

我是否需要在課堂中包裝答覆以獲得姓名? –

+2

你的意思是'{「User」:{...}}'還是你故意要返回無效的JSON?如果前者是,那麼簡單地引入包含一個屬性的「包裝器」或「容器」類: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

謝謝。我想我可以使用,如果我作爲數組返回用戶。在這種情況下,除了其他屬性,我可以排除這個用戶名來排除camelcase的事情嗎? –

+0

您可以使用'[JsonProperty]'重命名屬性,並且您也不需要包裝數組的包裝;只需返回一個'IEnumerable '。 – CodeCaster

+0

好的。再次感謝你。 –