"J'ai créé une fonction Azure dans cette fonction, j'appelle une API qui renvoie JSON. Je veux analyser ce JSON en un objet afin de pouvoir l'utiliser dans la fonction. Je ne peux pas ne pas utiliser Newton.JSON car la fonction semble ne pas savoir Comment puis-je analyser le JSON? "
Dans la fonction Azure, vous devez d'abord ajouter une référence à NewtonSoft.JSON. Vous pouvez le faire via "Newtonsoft.Json". N'oubliez pas les citations !!!
Vous pouvez alors utiliser la sérialisation normale via newtonsoft:
var response = await client.GetAsync("<url>");
var json = await response.Content.ReadAsStringAsync();
var o= JsonConvert.DeserializeObject<"Type">(json);
Voici un code source complet de la fonction Azure pour sérialiser/désérialiser des objets à l'aide de JsonNet:
#r "Newtonsoft.Json"
using System.Net;
using Newtonsoft.Json;
public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log)
{
dynamic body = await req.Content.ReadAsStringAsync();
var e = JsonConvert.DeserializeObject<EventData>(body as string);
return req.CreateResponse(HttpStatusCode.OK, JsonConvert.SerializeObject(e));
}
public class EventData
{
public string Category { get; set; }
public string Action { get; set; }
public string Label { get; set; }
}
Exemple d'entrée (corps de la demande):
{
"Category": "Azure Functions",
"Action": "Run",
"Label": "Test"
}
Exemple de sortie:
"{\"Category\":\"Azure Functions\",\"Action\":\"Run\",\"Label\":\"Test\"}"
Vous répondez ci-dessus renvoie une chaîne et non JSON. Je vous suggère de modifier votre réponse comme suit:
public static async Task<HttpResponseMessage> Run(HttpRequestMessage req, TraceWriter log)
{
dynamic body = await req.Content.ReadAsStringAsync();
var e = JsonConvert.DeserializeObject<EventData>(body as string);
return req.CreateResponse(HttpStatusCode.OK, e);
}
Cela renverra la sortie Sample sans les échappements JSON:
{"Category":"Azure Functions","Action":"Run","Label":"Test"}