2016-04-10 28 views
0

TokensRegex响应(web api)如下所示,按照数字顺序排列的数组列表。 有没有办法改变格式,或者其他原因必须是这样? 否则很难反序列化它或在结果上写一个查询。TokensRegex json响应

{ 
    "sentences": [ 
    { 
     "0": { 
     "text": "huge success", 
     "begin": 4, 
     "end": 6 
     }, 
     "1": { 
     "text": "new venture", 
     "begin": 17, 
     "end": 19 
     }, 
     "2": { 
     "text": "comfort zone", 
     "begin": 26, 
     "end": 28 
     }, 
     "length": 3 
    } 
    ] 
} 

回答

0

您可以使用Json.Net的LINQ-to-JSON API这个JSON反序列化到什么明智的。

首先,定义一个类Phrase这样的:

class Phrase 
{ 
    public string Text { get; set; } 
    public int Begin { get; set; } 
    public int End { get; set; } 
} 

然后你就可以做到这一点得到短语的列表:

JObject obj = JObject.Parse(json); 

List<Phrase> phrases = 
    obj["sentences"][0] 
     .Children<JProperty>() 
     .Where(jp => jp.Value.Type == JTokenType.Object) 
     .Select(jp => jp.Value.ToObject<Phrase>()) 
     .ToList(); 

小提琴:https://dotnetfiddle.net/hU4iTp

1

原因比赛是一个地图是为了允许命名捕获组。所以,未命名的组被锁定在一个任意的索引上,但是被命名的组将具有更合理的关键。