C#解析对子对象的JSON访问

时间:2018-05-15 16:50:56

标签: c# json

我有这个JSON:

{
    "total": 23695,
    "total_pages": 1185,
    "results": [{
        "id": "r7bVvV7MLdQ",
        "created_at": "2018-01-17T06:38:03-05:00",
        "updated_at": "2018-05-09T03:35:24-04:00",
        "width": 4032,
        "height": 2526,
        "color": "#F7EDE7",
        "description": null,
        "urls": {
            "raw": "https://images.unsplash.com/photo-1516189050082-44d4deb5ceef?ixlib=rb-0.3.5\u0026ixid=eyJhcHBfaWQiOjEyMDd9\u0026s=8b6caac6353f390fbbabde8441dd1959",
            "full": "https://images.unsplash.com/photo-1516189050082-44d4deb5ceef?ixlib=rb-0.3.5\u0026q=85\u0026fm=jpg\u0026crop=entropy\u0026cs=srgb\u0026ixid=eyJhcHBfaWQiOjEyMDd9\u0026s=89ca725623d794116d3741907c93ceab",
            "regular": "https://images.unsplash.com/photo-1516189050082-44d4deb5ceef?ixlib=rb-0.3.5\u0026q=80\u0026fm=jpg\u0026crop=entropy\u0026cs=tinysrgb\u0026w=1080\u0026fit=max\u0026ixid=eyJhcHBfaWQiOjEyMDd9\u0026s=666eb6ac25c7fec68d5994545b933726",
            "small": "https://images.unsplash.com/photo-1516189050082-44d4deb5ceef?ixlib=rb-0.3.5\u0026q=80\u0026fm=jpg\u0026crop=entropy\u0026cs=tinysrgb\u0026w=400\u0026fit=max\u0026ixid=eyJhcHBfaWQiOjEyMDd9\u0026s=3dbc611c97d323ff8b4b043cff19317b",
            "thumb": "https://images.unsplash.com/photo-1516189050082-44d4deb5ceef?ixlib=rb-0.3.5\u0026q=80\u0026fm=jpg\u0026crop=entropy\u0026cs=tinysrgb\u0026w=200\u0026fit=max\u0026ixid=eyJhcHBfaWQiOjEyMDd9\u0026s=0c760185c35eadb31a7bba9b9794d424"
        },
        "links": {
            "self": "https://api.unsplash.com/photos/r7bVvV7MLdQ",
            "html": "https://unsplash.com/photos/r7bVvV7MLdQ",
            "download": "https://unsplash.com/photos/r7bVvV7MLdQ/download",
            "download_location": "https://api.unsplash.com/photos/r7bVvV7MLdQ/download"
        },
        "categories": [],
        "sponsored": false,
        "likes": 0,
        "liked_by_user": false,
        "current_user_collections": [],
        "slug": "cloud-smoke-steam",
        "user": {
            "id": "G69mdFHx0X0",
            "updated_at": "2018-05-03T14:00:07-04:00",
            "username": "maxkuk",
            "name": "Max Kukurudziak",
            "first_name": "Max",
            "last_name": "Kukurudziak",
            "twitter_username": null,
            "portfolio_url": "http://www.instagram.com/makckuk",
            "bio": "Product Designer at MacPaw, Lecturer at Projector",
            "location": "Kiev, Ukraine",
            "links": {
                "self": "https://api.unsplash.com/users/maxkuk",
                "html": "https://unsplash.com/@maxkuk",
                "photos": "https://api.unsplash.com/users/maxkuk/photos",
                "likes": "https://api.unsplash.com/users/maxkuk/likes",
                "portfolio": "https://api.unsplash.com/users/maxkuk/portfolio",
                "following": "https://api.unsplash.com/users/maxkuk/following",
                "followers": "https://api.unsplash.com/users/maxkuk/followers"
            },
            "profile_image": {
                "small": "https://images.unsplash.com/profile-1518780839522-ee199eceaf8c?ixlib=rb-0.3.5\u0026q=80\u0026fm=jpg\u0026crop=faces\u0026cs=tinysrgb\u0026fit=crop\u0026h=32\u0026w=32\u0026s=c37d2f2844b45f52c0f66cd580a200c8",
                "medium": "https://images.unsplash.com/profile-1518780839522-ee199eceaf8c?ixlib=rb-0.3.5\u0026q=80\u0026fm=jpg\u0026crop=faces\u0026cs=tinysrgb\u0026fit=crop\u0026h=64\u0026w=64\u0026s=93647049c20b6a323870fe0886eee329",
                "large": "https://images.unsplash.com/profile-1518780839522-ee199eceaf8c?ixlib=rb-0.3.5\u0026q=80\u0026fm=jpg\u0026crop=faces\u0026cs=tinysrgb\u0026fit=crop\u0026h=128\u0026w=128\u0026s=aff2d13afe9fe418b562b85c226b7e8e"
            },
            "instagram_username": "makckuk",
            "total_collections": 0,
            "total_likes": 6,
            "total_photos": 56
        },
        "tags": [{
            "title": "cloud"
        },
        {
            "title": "smoke"
        },
        {
            "title": "steam"
        },
        {
            "title": "mountain"
        },
        {
            "title": "volcano"
        },
        {
            "title": "blue"
        },
        {
            "title": "rock"
        },
        {
            "title": "glacier"
        },
        {
            "title": "field"
        },
        {
            "title": "geysir"
        },
        {
            "title": "iceland"
        }],
        "photo_tags": [{
            "title": "cloud"
        },
        {
            "title": "smoke"
        },
        {
            "title": "steam"
        },
        {
            "title": "mountain"
        },
        {
            "title": "volcano"
        },
        {
            "title": "blue"
        },
        {
            "title": "rock"
        },
        {
            "title": "glacier"
        },
        {
            "title": "field"
        },
        {
            "title": "geysir"
        },
        {
            "title": "iceland"
        }]
    },

我需要results.profile_image.small我在很多方面尝试过它,但我从未弄清楚如何访问profile_image字段。

基本上我想做这样的事情:

dynamic array = JsonConvert.DeserializeObject(responz);

foreach (var itemx in array["results"])
{
    MessageBox.Show(itemx.profile_image.small.ToString()); 
}

我花了几个小时搞清楚,搜索StackOverflow。最后一个选项是使用正则表达式执行此操作,这将是非常愚蠢的事情。

1 个答案:

答案 0 :(得分:1)

根据您的JSON,实际路径应为:

itemx.user.profile_image.small

因此,如果您修改代码以包含缺少的“用户”部分:

dynamic array = JsonConvert.DeserializeObject(responz);

foreach (var itemx in array["results"])
{
    MessageBox.Show(itemx.user.profile_image.small.ToString()); 
}

这应该可以解决你的问题。

但是,如果您使用具体类反序列化,则可能不会出现此问题。如果你使用具体的类,你会有类型安全和Intelisense的帮助。您可以使用Json2CSharp或使用现代Visual Studio版本的“粘贴为类”功能轻松地将JSON示例转换为具体类。