【问题标题】:Deserialize JSON subdocument反序列化 JSON 子文档
【发布时间】:2015-12-03 22:37:51
【问题描述】:

我正在调用 JIRA Rest API 来接收工作日志对象列表。

我收到的 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,

如何让反序列化程序忽略这些属性? 感谢您的帮助!

【问题讨论】:

    标签: c# json api rest serialization


    【解决方案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>>();
    

    【讨论】:

    • 两种方式都会导致 Newtonsoft.Json.JsonReaderException(附加信息:读取字符串时出错。意外令牌:StartObject。路径'worklogs[0].author')
    • 不会发生在我身上。使用您使用的实际 JSON 和类更新您的问题。
    • 使用自写的 Worklog 类而不是(可怕的)Atlassian SDK 中的类,现在它可以工作了。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多