Функция Azure возвращает несколько объектов JSON - PullRequest
0 голосов
/ 23 мая 2018

Это мое приложение-функция Azure.

#r "System.Configuration"
#r "System.Data"
using System.Net;
using System.Configuration;
using System.Data.SqlClient;
using System.Threading.Tasks;

public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, 
TraceWriter log)
{       
    int num;    
    string query = req.GetQueryNameValuePairs()
        .FirstOrDefault(q => string.Compare(q.Key, "num", true) == 0)
        .Value;    

    if (query == null)
    {
        // Get request body
        dynamic data = await req.Content.ReadAsAsync<object>();
        num = data.num;
    }
    else {
        num = Convert.ToInt32(query);
    }      

    int[] numRead = new int[3];
    string[] nameRead = new string[3];    

    var str = 
ConfigurationManager.ConnectionStrings["sqldb_connection"].ConnectionString;

    using (SqlConnection conn = new SqlConnection(str))
    {
        conn.Open();
        var text = "select num,name from bus where num=@num;";

        using (SqlCommand cmd = new SqlCommand(text, conn))
        {
            cmd.Parameters.AddWithValue("@num", num);
            using (SqlDataReader reader = cmd.ExecuteReader()) 
            {
                int i = 0;
                while (reader.Read())
                {
                    numRead[i] = reader.GetInt32(0);                    
                    nameRead[i++] = reader.GetString(1);
                    Console.WriteLine(numRead[i] + ":" + nameRead[i]);                    
                }
            }
        }        
    }
    return req.CreateResponse(HttpStatusCode.OK, new {            
        name = nameRead[0],
        num = numRead[0]           
    });    
}

Я хочу, чтобы функция возвращала несколько json, как это

return req.CreateResponse(HttpStatusCode.OK, new {
        "item1" : {
            name = nameRead[0],
            num = numRead[0]
        },
        "item2" : {
            name = nameRead[1],
            num = numRead[1]
        },
        "item3" : {
            name = nameRead[2],
            num = numRead[2]
        }
    });

, но она не работает.

C # имеет класс JsonArray, JsonObject или JsonValue, но я не понимаю, как их использовать, и не знаю разницы между ними.

Ответы [ 2 ]

0 голосов
/ 23 мая 2018

Это должно работать, если вы сделаете его действительным C #:

return req.CreateResponse(HttpStatusCode.OK, new {
    item1 = new {
        name = nameRead[0],
        num = numRead[0]
    },
    item2 = new {
        name = nameRead[1],
        num = numRead[1]
    },
    item3 = new {
        name = nameRead[2],
        num = numRead[2]
    }
});
0 голосов
/ 23 мая 2018

Вы можете просто вернуть массив ваших экземпляров, и среда позаботится о преобразовании в JSON.

Сначала вы создадите класс для хранения ваших элементов:

public class Result
{
   public string Name {get; set;}
   public int Num {get; set;}
}

Итеперь вы просто возвращаете массив из них:

return req.CreateResponse(HttpStatusCode.OK, new Result[] {
        new Result() {
            Name = nameRead[0],
            Num = numRead[0]
        },
        new Result() {
            Name = nameRead[1],
            Num = numRead[1]
        },
        new Result() {
            Name = nameRead[2],
            Num = numRead[2]
        }
    });

Если вы хотите еще больше контроля над тем, как возвращаются данные, проверьте библиотеку Newtonsoft.JSON, которая де-факто по умолчанию в C # и предоставляет всеиз классов, которые вы упомянули.Его документация очень хороша со многими примерами, так что вы сможете найти там, что вам нужно.

...