2015-09-08 2 views
1

Я вызываю API JIRA Rest для получения списка объектов Worklog.Deserialize JDON subdocument

JSON Получаю, похоже.

{ 
"startAt": 0, 
"maxResults": 1, 
"total": 1, 
"worklogs": [ 
    { 
     "self": "http://www.example.com/jira/rest/api/2/issue/10010/worklog/10000", 
     "author": { 
      "self": "http://www.example.com/jira/rest/api/2/user?username=fred", 
      "name": "fred", 
      "displayName": "Fred F. User", 
      "active": false 
     }, 
     "updateAuthor": { 
      "self": "http://www.example.com/jira/rest/api/2/user?username=fred", 
      "name": "fred", 
      "displayName": "Fred F. User", 
      "active": false 
     }, 
     "comment": "I did some work here.", 
     "visibility": { 
      "type": "group", 
      "value": "jira-developers" 
     }, 
     "started": "2015-08-25T07:43:10.086+0000", 
     "timeSpent": "3h 20m", 
     "timeSpentSeconds": 12000, 
     "id": "100028" 
    } 
] 
} 

Как я уже сказал, я хочу привести его в список.

var json = client.MakeRequest("", password, user); 
List<Worklog> myList = JsonConvert.DeserializeObject<List<Worklog>>(json); 

Это не работает, из-за

"startAt": 0, 
"maxResults": 1, 
"total": 1, 

Как я могу сделать десериализатор игнорировать эти свойства? Спасибо за помощь!

ответ

1

Либо создать класс "RootObject", который действительно содержит свойства:

public class RootObject 
{ 
    public int startAt { get; set; } 
    public int maxResults { get; set; } 
    public int total { get; set; } 
    public List<Worklog> worklogs { get; set; } 
} 

И десериализации в том, что:

var rootObject = JsonConvert.DeserializeObject<RootObject>(json); 
// access rootObject.worklogs 

Или шаг в обработанном формате JSON и десериализации оттуда:

JObject o = JObject.Parse(json); 
JToken worklogsJson = o.SelectToken("worklogs"); 
var worklogs = worklogsJson.ToObject<List<Worklog>>(); 
+0

Оба способа ведут к Newtonsoft.Json.JsonReaderException (Дополнительная информация: Ошибка чтения строки. U Непредвиденный токен: StartObject. Path 'worklogs [0] .author') – waitingforthestorm

+0

Не для меня. Обновите свой вопрос с помощью фактического JSON и классов, которые вы используете. – CodeCaster

+1

Используется самозаписываемый класс Worklog вместо того, который находится в (ужасном) Atlassian SDK, теперь он работает. Спасибо! – waitingforthestorm

Смежные вопросы