首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用C#解析json.net提交git的列表

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

Stack Overflow用户
提问于 2016-11-30 07:02:36
回答 2查看 463关注 0票数 3

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

问题

从某个日期起,我必须解析GitHub提交的列表。

用于测试的示例json文件:示例json文件

json只是一个大的(或空的)数组。问题是,我不需要所有的数据,我只需要每个提交的沙。但是,如果您查看数组中的每一种类型,就会有多个shas。

有基地沙:

代码语言:javascript
复制
"sha": "fde139ae1d8fcf82bb145bbc99ed41763202e28f",

树沙:

代码语言:javascript
复制
"tree": {
        "sha": "5d33d345f2df166bc4c56cc9307a61a5ee57d346",
        "url": "https://api.github.com/repos/QuiZr/ProjectPorcupineLocalization/git/trees/5d33d345f2df166bc4c56cc9307a61a5ee57d346"
      },

及家长sha:

代码语言:javascript
复制
"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)
  • 应该优雅
  • 需要支持统一游戏引擎(即C#版本小于或等于2.0)
  • 我真的不想为此创建一个新的对象类型。
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-11-30 07:23:47

在本例中,您可以非常容易地使用LINQ -将文本解析为JArray,然后询问每个对象的sha属性:

代码语言:javascript
复制
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<string> 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不存在,那么为提交和反序列化创建一个模型类型将是一个非常好的解决方案。

票数 5
EN

Stack Overflow用户

发布于 2016-11-30 07:27:07

如果您真的不想要新类型,可以使用匿名类型反序列化它。http://www.newtonsoft.com/json/help/html/DeserializeAnonymousType.htm

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40882192

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档