使用Json.net反序列化Json集合时丢弃项目

时间:2014-01-02 16:54:41

标签: c# .net json json.net deserialization

我有一个JSON流,它发送如下所示的集合:

[{"channel":"24e67e0d-1cad-4cc09e7af8523ef460fe",     
  "op":"private", 
  "origin":"broadcast", 
  "stamp":1388680103991749},
"13886801043507640",
"24e67e0d-1cad-4cc0-9e7a-f8523ef460fe"]

第一个对象没问题,但最后两个对象("13886801043507640""24e67e0d-1cad-4cc0-9e7a-f8523ef460fe")会使Json.Net抛出异常,甚至不遵循格式{field:name,field:name}

如何使用Json.Net正确处理这些对象(或至少丢弃它们)?

干杯,任何意见都表示赞赏。

1 个答案:

答案 0 :(得分:1)

这是一种使用Json.Net从JSON中提取对象数据的方法。

首先为对象定义一个类:

class Item
{
    public string channel { get; set; }
    public string op { get; set; }
    public string origin { get; set; }
    public long stamp { get; set; }
}

然后使用Json.Net的LINQ-to-JSON API来解析和过滤数组,只提取对象部分:

JArray array = JArray.Parse(json);
Item item = array.Children<JObject>().First().ToObject<Item>();

如果可以有多个对象,您可以将它们放入这样的列表中(假设它们都具有相同的结构):

List<Item> items = array.Children<JObject>()
                        .Select(jo => jo.ToObject<Item>())
                        .ToList();

同样,您可以从数组中获取字符串值:

List<string> strings = array.Children<JValue>()
                            .Select(jv => jv.ToString())
                            .ToList();