Десериализовать данные Шодана - PullRequest
0 голосов
/ 18 октября 2018

У меня проблемы с десериализацией данных, которые я получаю от Шодана.Ниже приведены классы, которые я получил от json2csharp, и я пытаюсь создать массив совпадений и просмотреть их.Кажется, я уже пробовал все, кроме рабочего массива.Сами данные совпадают как корень с объектами из них, которые содержат местоположение (со своими собственными данными и т.д.)За исключением ниже, что я вырезал немного.Это моя ошибка: Невозможно десериализовать текущий объект JSON (например, {"name": "value"}) в тип 'Shodan.Match []', потому что тип требует массив JSON (например, [1,2,3])правильно десериализовать.

var data = JsonConvert.DeserializeObject<Match[]>(allData);

{"matches": [{"product": "product", "hash": 0, "ip": 123123, "isp": "Verizon Internet Services"}], "total": 1}


public class Location
{
    public string city { get; set; }
    public string region_code { get; set; }
    public object area_code { get; set; }
    public double longitude { get; set; }
    public string country_code3 { get; set; }
    public double latitude { get; set; }
    public string postal_code { get; set; }
    public object dma_code { get; set; }
    public string country_code { get; set; }
    public string country_name { get; set; }
}

public class Options
{
}

public class Shodan
{
    public string crawler { get; set; }
    public string id { get; set; }
    public string module { get; set; }
    public Options options { get; set; }
}

public class Match
{
    public int hash { get; set; }
    public int ip { get; set; }
    public string isp { get; set; }
    public string transport { get; set; }
    public string data { get; set; }
    public string asn { get; set; }
    public int port { get; set; }
    public List<string> hostnames { get; set; }
    public Location location { get; set; }
    public DateTime timestamp { get; set; }
    public List<string> domains { get; set; }
    public string org { get; set; }
    public object os { get; set; }
    public Shodan _shodan { get; set; }
    public string ip_str { get; set; }
    public string product { get; set; }
}

public class RootObject
{
    public List<Match> matches { get; set; }
    public int total { get; set; }
}

1 Ответ

0 голосов
/ 18 октября 2018

Вы можете создать другой класс, например

var allData = 
{"matches": [{"product": "product", "hash": 0, "ip": 123123, "isp": "Verizon Internet Services"}], "total": 1}

public class MyMatches {
    public Match[] matches {get; set;}
}

, а затем использовать его в десериализаторе.var data = JsonConvert.DeserializeObject<MyMatches>(allData);

Это если приведенный вами пример кода JSON верен.


ИСПРАВЛЕНИЕ

Только что увидел класс RootObject.Просто используйте это.

...