2016-12-15 2 views
0

Я новичок в программировании API. В настоящее время я работаю с SwaggerUI для .NETSwagger создает результат JSON .NET

Я хочу отвечать на запросы в JSON-формате:

{ 
    "id": "value" 
} 

Как я могу создать и вернуть такой формат для своих ценностей? Например, код по умолчанию в проекте возвращает

[ 
    "value" 
] 

с помощью этой функции

public IEnumerable<string> Get() 
{ 
    return new string[] { "value1", "value2" }; 
} 

Как я могу вернуть объект JSON, который будет интерпретироваться правильно чванство?

ответ

3

Вы имеете право установки для возврата объекта по мере необходимости. Проблема в том, что вы не возвращаете правильный объект.

Ожидаемый json {"id":"value"} представляет собой json-представление объекта . Json, который вы возвращаете, представляет собой json-представление списка .

Вы возвращаетесь, это список, потому что это то, что возвращает ваш метод. Как ответил @NateBarbettini, вам нужно изменить то, что возвращает ваш метод.

Значение, возвращаемое вашим методом, равно string[], который представляет собой строковый массив, который будет отформатирован в списке JSON. Вам нужно вместо этого вернуть объект. Вы можете использовать анонимный объект, например, @NateBarbettini, или вы можете вернуть пользовательский класс, который вы пишете.

Для получения результата, класс:

public class FooViewModel 
{ 
    public string Id {get; set;} 
} 

бы сделать трюк.

Проблема, с которой вы сейчас сталкиваетесь, это корпус отключен. FooViewModel.Id использует PascalCase, который является стандартным для C#, но json использует camelCase.

  1. Вы можете разорвать C# соглашение и использовать CamelCase имена свойств
  2. Вы можете настроить JsonSerialization Настройку в Startup.cs или Global.asax.cs использовать верблюжий: config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver(); где config это ваш HttpConfiguration. Вы можете увидеть это в вашем коде, как GlobalConfiguration.Configuration
    1. CamelCasePropertyNamesContractResolver
    2. Configuring WebApi
  3. Вы можете использовать JsonPropertyAttribute явно установить, что имя JSON вашей собственности должно быть.

Пример

[JsonProperty("id")] 
public string Id {get; set;} 

Независимо от того, что вы делаете, вы должны будете изменить тип возврата вашего метода из IEnumerable<string>. Мне нравятся особенности, поэтому я бы установил тип возвращаемого значения на то, что вы называете своим классом, но оставить его на object будет работать нормально.

2

Вы можете вернуть анонимный объект, который имеет точную форму вы хотите:

public object Get() 
{ 
    return new { id = "value" }; 
} 
0

я использую это для преобразования MVC контроллера возвращаемого значения JSON:

return Json(yourObject, JsonRequestBehavior.AllowGet);