2016-04-10 132 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

原因比賽是一個地圖是爲了允許命名捕獲組。所以,未命名的組被鎖定在一個任意的索引上,但是被命名的組將具有更合理的關鍵。