0

我正在尝试将异步 JSON 响应中的键值分配给变量,所讨论的 JSON 键是“threatType”键。我正在查询 google 的 safebrowsing v4 API,我得到了很好的响应,问题是当我尝试将键分配给变量时,没有分配任何内容。这是我的代码:

public static async Task<string> CheckUrl( string Api_Key, string MyUrl)
        {
            safeBrowsing_panel i = new safeBrowsing_panel();
            var service = new SafebrowsingService(new BaseClientService.Initializer
            {
                ApplicationName = "Link-checker",
                ApiKey = Api_Key
            });

            var request = service.ThreatMatches.Find(new FindThreatMatchesRequest()
            {
                Client = new ClientInfo
                {
                    ClientId = "Link-checker",
                    ClientVersion = "1.5.2"
                },
                ThreatInfo = new ThreatInfo()
                {
                    ThreatTypes = new List<string> { "SOCIAL_ENGINEERING", "MALWARE" },
                    PlatformTypes = new List<string> { "ANY_PLATFORM" },
                    ThreatEntryTypes = new List<string> { "URL" },
                    ThreatEntries = new List<ThreatEntry>
                    {
                        new ThreatEntry
                        {
                            Url = MyUrl
                        }
                    }
                }
            });

            var response = await request.ExecuteAsync();
            string json = JsonConvert.SerializeObject(await request.ExecuteAsync());

            string jsonFormatted = JToken.Parse(json).ToString(Formatting.Indented);
            Console.WriteLine(jsonFormatted);
            return jsonFormatted;
        }

我创建了类来解析 json:

public class ThreatRes
        {
            public string threatType;
        }

        public class RootObjSB
        {
            public List<ThreatRes> matches;
        }

我称之为:

string SB_Result = await CheckUrl("MyAPIKey", "Bad_URL");
RootObjSB obj = JsonConvert.DeserializeObject<RootObjSB>(SB_Result);

来自谷歌的 JSON 响应:

{
  "matches": [
    {
      "cacheDuration": "300s",
      "platformType": "ANY_PLATFORM",
      "threat": {
        "digest": null,
        "hash": null,
        "url": "http://badurl.com/",
        "ETag": null
      },
      "threatEntryMetadata": null,
      "threatEntryType": "URL",
      "threatType": "SOCIAL_ENGINEERING",
      "ETag": null
    }
  ],
  "ETag": null
}

我需要帮助。

4

1 回答 1

1

所以我尝试使用JavaScriptSerializer它似乎工作得很好,我还重建了我的类来解析 JSON 响应上的所有属性。

重构类:

public class Threat
        {
            public object digest { get; set; }
            public object hash { get; set; }
            public string url { get; set; }
            public object ETag { get; set; }
        }

        public class Match
        {
            public string cacheDuration { get; set; }
            public string platformType { get; set; }
            public Threat threat { get; set; }
            public object threatEntryMetadata { get; set; }
            public string threatEntryType { get; set; }
            public string threatType { get; set; }
            public object ETag { get; set; }
        }

        public class RootObjSB
        {
            public List<Match> matches { get; set; }
            public object ETag { get; set; }
        }

我像这样反序列化它:

string SB_Result = await CheckUrl("MyAPIKey", "Bad_URL");
var obj = new JavaScriptSerializer().Deserialize<RootObjSB>(SB_Result);
string threat = obj.matches[0].threatType;
Console.WriteLine(threat);

我真的不知道为什么我尝试的第一个选项没有正确解析数据,但这就是我克服这个问题的方法。希望它可以帮助任何人经历同样的事情

于 2020-01-24T22:43:19.653 回答