Вернуть JSON из метода API - PullRequest
0 голосов
/ 06 июня 2019

Я использую ASP.net Core Web API (C #) здесь

У меня есть строка JSON:

{
   "userId":321,   
   "account":"new  
   "fname":"Adam",
   "lname":"Silver" 
   "features":[
      {
         "available":true,
         "status":open,
         "admin":false        
      }
   ]
}

Я хочу проверить эти данные в своем угловом коде, поэтому хотел жестко закодировать их в моем API; тогда я хочу, чтобы мой API вернул это обратно. Что мне трудно, это как вернуть это. Должен ли я вернуть это как строку или нужно разобрать?

У меня есть этот метод в моем API:

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

Мне нужно представить это в виде строки или как-то разобрать?

Ответы [ 3 ]

1 голос
/ 06 июня 2019

Ваш JSON недействителен.Нам нужно это исправить. JSONLint может быть полезным для этого.Я взял ваш JSON и исправил синтаксические ошибки, пока не получил следующее:

{
   "userId": 321,   
   "account": "new",
   "fname": "Adam",
   "lname": "Silver",
   "features":[
      {
         "available": true,
         "status": "open",
         "admin": false        
      }
   ]
}

Затем мне нужно сгенерировать структуру класса C # для представления этого JSON.Я мог бы создать его вручную, но отличный json2csharp.com может быстро сгенерировать его для меня.Я передал этот JSON и получил следующие классы обратно:

public class Feature
{
    public bool available { get; set; }
    public string status { get; set; }
    public bool admin { get; set; }
}

public class RootObject
{
    public int userId { get; set; }
    public string account { get; set; }
    public string fname { get; set; }
    public string lname { get; set; }
    public List<Feature> features { get; set; }
}

Я поместил эти определения классов в свое приложение.Затем мне нужно изменить метод действия, чтобы создать экземпляр этого класса RootObject (вы должны изменить имя, чтобы оно действительно соответствовало тому, для чего оно предназначено).

[HttpGet]        
public ActionResult<RootObject> Get()
{
    // Create an instance of our RootObject and set the properties
    var myRootObject = new RootObject();
    myRootObject.userId = 321;
    myRootObject.account = "new";
    myRootObject.fname = "Adam";
    myRootObject.lname = "Silver";
    myRootObject.features = new List<Feature>();

    // Create an instance of a feature and set its properties
    var feature = new Feature();
    feature.available = true;
    feature.status = "open";
    feature.admin = false;

    // Add the new feature to the features collection of our RootObject    
    myRootObject.features.Add(feature);

    // Return the instance of our RootObject
    // The framework will handle serializing it to JSON for us
    return myRootObject;
}

Обратите внимание, что я изменил сигнатуру вашего метода.Я сделал так, чтобы он больше не принимал IEnumerable, потому что не было понятно, почему у вас это было.И я изменил его, чтобы он возвращал ActionResult после проверки документации Microsoft .

1 голос
/ 06 июня 2019

Привет Пожалуйста, найдите правильный формат JSON для выше:

{
    "userId": 321,
    "account": "new",
    "fname": "Adam",
    "lname": "Silver",
    "features": [{
        "available": true,
        "status": "open",
        "admin": false
    }]
}

вы можете использовать ниже класс в вашем веб-API для передачи соответствующих данных

public class Feature
{
    public bool available { get; set; }
    public string status { get; set; }
    public bool admin { get; set; }
}

public class RootObject
{
    public int userId { get; set; }
    public string account { get; set; }
    public string fname { get; set; }
    public string lname { get; set; }
    public List<Feature> features { get; set; }
}

затем в конце, возвращая данные, преобразуйте соответствующий объект класса в JSON, сериализовав его в формат JSON.

Надеюсь, он удовлетворит ваше требование.

0 голосов
/ 06 июня 2019

Включение комментариев в ответ: Если вы используете ActionResult, я предполагаю, что вы используете asp.net mvc.То, что вы хотите, это JsonResult.

    [HttpGet]
    public JsonResult Get()
    {
        return new JsonResult
        {
            Data = new
            {
                userId = 321,
                account = new
                {
                    fname = "Adam",
                    lname = "Silver",
                    features = new object[]{
                    new
                {
                    available = true,
                    status = "open",
                    admin = false
                }
                }
                }
            },
            JsonRequestBehavior = JsonRequestBehavior.AllowGet
        };
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...