web-dev-qa-db-ja.com

オブジェクトのJSON配列を解析するC#

json形式のこのようなオブジェクトの配列があります。

_{"results":[{"SwiftCode":"","City":"","BankName":"Deutsche Bank","Bankkey":"10020030","Bankcountry":"DE"},{"SwiftCode":"","City":"10891 Berlin","BankName":"Commerzbank Berlin (West)","Bankkey":"10040000","Bankcountry":"DE"}]}
_

私が取得したいのは、C#の_object[]_です。1つのオブジェクトには、1つのjsonオブジェクトにあるすべてのデータが含まれます。事は、私ができることです[〜#〜] not [〜#〜]このオブジェクトのプロパティでクラスを作成します:

_public class Result
{
    public int SwiftCode { get; set; }
    public string City { get; set; }
    //      .
    //      .
    public string Bankcountry { get; set; }
}
_

毎回異なる結果が返されるので、それが常にオブジェクトの配列であることを知っているからです。誰かがオブジェクトの配列を取り戻す方法を知っていますか?

編集

このオブジェクトをWriteObject(results)経由でpowershellに渡す必要があります。したがって、出力はarray内のオブジェクトのみである必要があります。

13
AstralisSomnium

newtonsoft を次のように使用します。

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;
            }
        }
    }
}
13
allonhadaya

つかいます NewtonSoft JSON.Net としょうかん。

dynamic obj = Newtonsoft.Json.JsonConvert.DeserializeObject(jsonString);

お役に立てれば。

14
Marvin Smit

これは古い質問ですが、将来的に誰かに役立つ場合は、とにかく私の答えを投稿すると思いました

 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);
      }
 }

このソリューションでは、Newtonsoftライブラリを使用します。using Newtonsoft.Json.Linq;

JSONオブジェクトからリストを取得する方が少し簡単な解決策があります。これが役立つことを願っています。

次のようなJSONを取得しました。

{"Accounts":"[{\"bank\":\"Itau\",\"account\":\"456\",\"agency\":\"0444\",\"digit\":\"5\"}]"}

そして、このようないくつかのタイプを作りました

    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; }

}

そして「魔法」の部分

 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()));
        }
2
Luiz Paulo

これはもっと簡単だと思います。

dynamic obj = JObject.Parse(jsonString);
string results  = obj.results;
foreach(string result in result.Split('))
{
//Todo
}
1
mca

文字列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);

vauleが文字列の場合、解析できませんでした。

名前を見てください:食事、名前が1の場合は解析されます

0
Remil k.r