J'ai un tableau d'objets comme celui-ci au format json
:
{"results":[{"SwiftCode":"","City":"","BankName":"Deutsche Bank","Bankkey":"10020030","Bankcountry":"DE"},{"SwiftCode":"","City":"10891 Berlin","BankName":"Commerzbank Berlin (West)","Bankkey":"10040000","Bankcountry":"DE"}]}
Ce que je veux obtenir, c’est un object[]
en C #, où un objet contient toutes les données contenues dans un objet json. La chose est, je peuxPASfaire une classe avec les propriétés de cet objet comme ici:
public class Result
{
public int SwiftCode { get; set; }
public string City { get; set; }
// .
// .
public string Bankcountry { get; set; }
}
Parce que je reçois à chaque fois des résultats différents, mais je sais que c'est toujours un tableau d'objets. Quelqu'un sait comment je pourrais arriver à récupérer un tableau d'objets?
MODIFIER
Je dois transmettre cet objet à PowerShell via WriteObject(results)
. Donc, la sortie ne devrait être que l'objet DANS la array
.
Utilisez newtonsoft like so:
using System.Collections.Generic;
using System.Linq;
using Newtonsoft.Json.Linq;
class Program
{
static void Main()
{
string json = "{'results':[{'SwiftCode':'','City':'','BankName':'Deutsche Bank','Bankkey':'10020030','Bankcountry':'DE'},{'SwiftCode':'','City':'10891 Berlin','BankName':'Commerzbank Berlin (West)','Bankkey':'10040000','Bankcountry':'DE'}]}";
var resultObjects = AllChildren(JObject.Parse(json))
.First(c => c.Type == JTokenType.Array && c.Path.Contains("results"))
.Children<JObject>();
foreach (JObject result in resultObjects) {
foreach (JProperty property in result.Properties()) {
// do something with the property belonging to result
}
}
}
// recursively yield all children of json
private static IEnumerable<JToken> AllChildren(JToken json)
{
foreach (var c in json.Children()) {
yield return c;
foreach (var cc in AllChildren(c)) {
yield return cc;
}
}
}
}
Utilisez la bibliothèque NewtonSoft JSON.Net
.
dynamic obj = Newtonsoft.Json.JsonConvert.DeserializeObject(jsonString);
J'espère que cela t'aides.
Bien que ce soit une vieille question, je pensais poster ma réponse quand même, si cela peut aider quelqu'un à l'avenir
JArray array = JArray.Parse(jsonString);
foreach (JObject obj in array.Children<JObject>())
{
foreach (JProperty singleProp in obj.Properties())
{
string name = singleProp.Name;
string value = singleProp.Value.ToString();
//Do something with name and value
//System.Windows.MessageBox.Show("name is "+name+" and value is "+value);
}
}
Cette solution utilise la bibliothèque Newtonsoft, n'oubliez pas d'inclure using Newtonsoft.Json.Linq;
Je crois que c'est beaucoup plus simple.
dynamic obj = JObject.Parse(jsonString);
string results = obj.results;
foreach(string result in result.Split('))
{
//Todo
}
Je viens d'avoir une solution un peu plus facile, obtenir une liste d'un objet JSON. J'espère que cela peut aider.
J'ai un JSON comme ça:
{"Accounts":"[{\"bank\":\"Itau\",\"account\":\"456\",\"agency\":\"0444\",\"digit\":\"5\"}]"}
Et fait des types comme celui-ci
public class FinancialData
{
public string Accounts { get; set; } // this will store the JSON string
public List<Accounts> AccountsList { get; set; } // this will be the actually list.
}
public class Accounts
{
public string bank { get; set; }
public string account { get; set; }
public string agency { get; set; }
public string digit { get; set; }
}
et la partie "magique"
Models.FinancialData financialData = (Models.FinancialData)JsonConvert.DeserializeObject(myJSON,typeof(Models.FinancialData));
var accounts = JsonConvert.DeserializeObject(financialData.Accounts) as JArray;
foreach (var account in accounts)
{
if (financialData.AccountsList == null)
{
financialData.AccountsList = new List<Models.Accounts>();
}
financialData.AccountsList.Add(JsonConvert.DeserializeObject<Models.Accounts>(account.ToString()));
}
string jsonData1 = @ "[{" "name" ":" "0" "," "price" ":" "40" "," "count" ":" "1" "," "productId" ":" "4" "," "catid" ":" "4" "," "productTotal" ":" "40", "" orderstatus "": "" 0 "", "" orderkey "": "" 123456789 ""}] ";
string jsonData = jsonData1.Replace("\"", "");
DataSet ds = new DataSet();
DataTable dt = new DataTable();
JArray array= JArray.Parse(jsonData);
pourrait pas analyser, si le vaule est une chaîne ..
regardez nom: repas, si nom: 1 alors il va analyser