【问题标题】:How to deserialize a JSON list that every item has it's own node?如何反序列化每个项目都有自己的节点的 JSON 列表?
【发布时间】:2017-07-01 16:57:26
【问题描述】:

所以我有一个这种格式的 json 列表:

friendships
  14349334
    following=false
    follows=false
  12323445
    following=false
    follows=false
  542545
    following=false
    follows=false
  ...

格式错误,如您所见,它们由用户 ID 分隔。如果它是FriendshipList,我可以有一个预定义的类并使用Json.NET,但现在不可能。

如何反序列化每个项目都有自己的节点的列表?

{“友谊”:{“904667009”:{“关注”:假,“关注”:假}, “918386564”:{“关注”:真,“关注”:假},“898262788”: {“关注”:假,“关注”:假}}}

【问题讨论】:

标签: c# json json.net


【解决方案1】:

使用字典应该允许您处理 id。

public class Friendship {
    public bool following { get; set; }
    public bool follows { get; set; }
}

public class RootObject {
    public Dictionary<string, Friendship> Friendships friendships { get; set; }
}

【讨论】:

    【解决方案2】:

    这是一个使用匿名类反序列化 json 的示例:

    var json = "{ \"friendships\": { \"904667009\": { \"following\": false, \"follows\": false}, \"918386564\": { \"following\": true, \"follows\": false}, \"898262788\": { \"following\": false, \"follows\": false} } }";
    
    var jsonParsed = new JavaScriptSerializer().DeserializeObject(json) as Dictionary<string, object>;
    
    var friendShips = ((Dictionary<string, object>)jsonParsed["friendships"]).Select(friendShip =>
    {
        var followData = (Dictionary<string, object>)friendShip.Value;
    
        return new
        {
            FriendShipID = friendShip.Key,
            Following = Convert.ToBoolean(followData["following"]),
            Follows = Convert.ToBoolean(followData["follows"])
        };
    }).ToList();
    

    您甚至可以将匿名课程替换为 Nkosi 发布的课程

    【讨论】:

    • 是的,我自己实际上使用 Json.NET :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-04
    • 1970-01-01
    • 1970-01-01
    • 2021-09-06
    • 1970-01-01
    相关资源
    最近更新 更多