当前位置:  开发笔记 > 编程语言 > 正文

C#使用json.net解析git提交列表

如何解决《C#使用json.net解析git提交列表》经验,为你挑选了1个好方法。

我一直在浏览各种网站和JSON.net文档,但我找不到一种优雅的方式来做到这一点.

问题

我必须解析自某个日期以来的GitHub提交列表.

我一直用于测试的示例json文件:示例json文件

json只是一个大型(或空)阵列.问题是我不需要所有的数据,我只需要每个提交的sha.但是,如果查看数组中的每个类型,则会有多个shas.

有基础:

"sha": "fde139ae1d8fcf82bb145bbc99ed41763202e28f",

树沙:

"tree": {
        "sha": "5d33d345f2df166bc4c56cc9307a61a5ee57d346",
        "url": "https://api.github.com/repos/QuiZr/ProjectPorcupineLocalization/git/trees/5d33d345f2df166bc4c56cc9307a61a5ee57d346"
      },

和父母:

"parents": [
      {
        "sha": "8b9b43e813645c3a66911247b3dca916af937738",
        "url": "https://api.github.com/repos/QuiZr/ProjectPorcupineLocalization/commits/8b9b43e813645c3a66911247b3dca916af937738",
        "html_url": "https://github.com/QuiZr/ProjectPorcupineLocalization/commit/8b9b43e813645c3a66911247b3dca916af937738"
      }
    ]

我只想要第一个沙.不是其他的.

要求

需要使用JSON.net(不是Ockokit)

应该优雅

需要支持Unity游戏引擎(即C#版本小于或等于2.0)

我真的不想为此创建一个新的对象类型.

Jon Skeet.. 5

在这种情况下,您可以非常轻松地使用LINQ to JSON - 将文本解析为a JArray,然后询问sha每个对象的属性:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Newtonsoft.Json.Linq;

class Test
{
    static void Main()
    {
        string json = File.ReadAllText("test.json");
        JArray array = JArray.Parse(json);
        List hashes = array.Select(o => (string) o["sha"]).ToList();
        foreach (var hash in hashes)
        {
            Console.WriteLine(hash);
        }
    }
}

请注意,这使用来自C#3的lambda表达式,但在Unity中应该没问题 - 它只支持CLR v2,但我相信.NET 3.5框架.

在将来,我不会让诸如"它只是代码库的一小部分"之类的问题让你无法创建类型 - 如果LINQ to JSON不存在,则为提交创建模型类型并反序列化为是一个非常好的解决方案.



1> Jon Skeet..:

在这种情况下,您可以非常轻松地使用LINQ to JSON - 将文本解析为a JArray,然后询问sha每个对象的属性:

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using Newtonsoft.Json.Linq;

class Test
{
    static void Main()
    {
        string json = File.ReadAllText("test.json");
        JArray array = JArray.Parse(json);
        List hashes = array.Select(o => (string) o["sha"]).ToList();
        foreach (var hash in hashes)
        {
            Console.WriteLine(hash);
        }
    }
}

请注意,这使用来自C#3的lambda表达式,但在Unity中应该没问题 - 它只支持CLR v2,但我相信.NET 3.5框架.

在将来,我不会让诸如"它只是代码库的一小部分"之类的问题让你无法创建类型 - 如果LINQ to JSON不存在,则为提交创建模型类型并反序列化为是一个非常好的解决方案.

推荐阅读
牛尾巴2010
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有