C#解析JSON对象数组

时间:2013-11-11 15:52:14

标签: c# arrays json parsing

我有一个像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[],其中一个对象包含一个json对象中的所有数据。问题是,我可以创建一个具有此对象属性的类,如下所示:

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

因为我每次都得到不同的结果,但我知道它总是一个对象数组。有人知道如何设法让一组对象回来吗?

修改

我必须通过WriteObject(results)将此对象传递给powershell。所以输出应该只是array中的对象。

6 个答案:

答案 0 :(得分:14)

使用NewtonSoft JSON.Net库。

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

希望这有帮助。

答案 1 :(得分:12)

像这样使用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;
            }
        }
    }
}

答案 2 :(得分:8)

虽然这是一个老问题,但我认为无论如何我都会发布我的答案,如果这有助于将来的某个人

$( '#switchOutput1_AA' ).parent().addClass('off');
$( '#switchOutput1_AA' ).parent().removeClass('btn-success');
$( '#switchOutput1_AA' ).parent().addClass('btn-danger');

此解决方案使用Newtonsoft库,不要忘记包含 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); } }

答案 3 :(得分:1)

我相信这更简单;

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

答案 4 :(得分:1)

我刚刚从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()));
        }

答案 5 :(得分:0)

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

如果vaule是一个字符串,则无法解析。

看名字:饭菜,如果名字:1,它将解析