2016-06-23 3 views
-1

Я разработал webpi asp.net и тестировал его с помощью скрипача. Я получаю ответ, как показано ниже:Webapi как получить имя ответ json вместо этого, начиная с JSON

Вместо этого

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

Может ли он быть изменен, как показано ниже?

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

Но вместо ответа, начинающегося с JSON, я хотел бы иметь собственное имя. Может ли кто-нибудь помочь, как достичь этого?

Благодаря

+0

Что значит «пользовательское имя»? И это не JSON. – Utkanos

+0

Нужно ли обертывать ответ в классе, чтобы получить имя? –

+2

Вы имеете в виду '{" Пользователь ": {...}}' или вы намеренно хотите вернуть недействительный 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

Спасибо. Я думаю, что могу использовать, если я возвращаю пользователей как массив. В этом случае, помимо других свойств, я могу исключить это имя пользователя, чтобы исключить дело с верблюдом? –

+0

Вы можете использовать '[JsonProperty]' для переименования свойств, и вам также не нужна оболочка для массивов; просто верните 'IEnumerable '. – CodeCaster

+0

Хорошо. Еще раз спасибо. –