如何使用c#动态反序列化数组?

时间:2015-04-12 22:03:13

标签: json.net

我正在尝试使用C#动态将以下JSON反序列化为数组:

[
  {
    "itemId":"15",
    "quantity":101,
    "eventTimestamp":"00000000-0000-0000-0000-000000000000",
    "salesChannel":"1",
    "unlimitedQuantity":false
  },
  {
    "itemId":"15",
    "quantity":101,
    "eventTimestamp":"00000000-0000-0000-0000-000000000000",
    "salesChannel":"2",
    "unlimitedQuantity":false
  }
]

我已经尝试了两种不同的方法,但没有成功:

dynamic itemsBalance = JObject.Parse(content);

var itemBalanceType = new {
    itemId = "", quantity = 0, eventTimestamp = "", salesChannel = ""
};
var itemsBalance = JsonConvert.DeserializeAnonymousType(content, itemBalanceType);

我目前正在使用C#dynamics与所有其他反序列化,并且不希望为每个响应创建类。 有没有办法做到这一点?

由于

2 个答案:

答案 0 :(得分:0)

我找到了解决方案:

JArray itemsBalance = JArray.Parse(content);
if (itemsBalance != null)
{
    for (int i = 0; i < itemsBalance.Count; i++)
    {
        string itemBalanceJSON = itemsBalance[i].ToString();
        dynamic itemBalance = JObject.Parse(itemBalanceJSON);
        lbxResponse.Items.Add(itemBalance.itemId + " - " +    itemBalance.salesChannel +": " + itemBalance.quantity.ToString());
    }
}

如果有更好的,请告诉我......

答案 1 :(得分:0)

你可以用更少的代码来完成:

dynamic result = JsonConvert.Deserialize(content);
foreach(var entry in result)
{
  lbxResponse.Items.Add(entry.itemId + " - " + entry.salesChannel + ": " + entry.quantity);
}