C # - экземпляр класса, который возвращает объекты JSON - PullRequest
0 голосов
/ 03 сентября 2018

Я изучаю C #, и я создал консольное приложение, которое читает текстовую запись и ищет API, который возвращает значение в JSON, затем я показываю эти значения консолью. Теперь мне нужно передать это в графическую среду, и я создал класс «MyClass», и внутри этого класса я создал метод «MyMethod», который получит в качестве параметра 15-значное число и запросит API ( например консольное приложение), а затем вернуть эти значения.

Чего я не знаю, так это как правильно создать метод и создать его экземпляр из другого класса, поскольку он генерирует ошибки.

Мой JSON:

{
    "success": true,
    "result": {
        "id": "20429683581",
        "name": "CINEPLEX S.A",
        "Condition": "HABIDO",
        "PLE": "02\/01\/2013",
        "lawyers": [
            {
                "type": "DNI",
                "numdoc": "07871885",
                "name": "PONCE PINTO ALEJANDRO EDUARDO",
                "date": "22\/08\/2000"
            },
            {
                "type": "DNI",
                "numdoc": "09333203",
                "name": "SORIANO BARRANTES JOSE FERNANDO",
                "date": "22\/09\/2008"
            }
        ],
        "workers": [
            {
                "time": "2017-07",
                "service": "8"
            },
            {
                "time": "2018-06",
                "service": "13"
            }
        ]
    }
}

У меня есть эти определенные классы:

public class Lawyer
{
    public string type { get; set; }
    public string numdoc { get; set; }
    public string name { get; set; }
    public string date { get; set; }
}

public class Worker
{
    public string time { get; set; }
    public string service { get; set; }
}

public class Result
{
    public string id { get; set; }
    public string name { get; set; }
    public string Condition { get; set; }
    public string PLE { get; set; }
    public List<Lawyer> lawyers { get; set; }
    public List<Worker> workers { get; set; }
}

public class RootObject
{
    public bool success { get; set; }
    public Result result { get; set; }
}

В консольном приложении они работали хорошо:

RootObject rootobject;

HttpWebRequest request = (HttpWebRequest)WebRequest.Create(@"https://www.example.com/api/?get=" + inid);
HttpWebResponse response;

try
{
    response = (HttpWebResponse)request.GetResponse();
    Stream stream = response.GetResponseStream();
    StreamReader reader = new StreamReader(stream);
    {
        var json = reader.ReadToEnd();
        rootobject = JsonConvert.DeserializeObject<RootObject>(json);
    }
    if (rootobject.success == true)
    {
        Console.WriteLine("---------------");
        Console.WriteLine("ID: " + rootobject.result.id);
        Console.WriteLine("NAME: " + rootobject.result.name);
        Console.WriteLine("CONDITION: " + rootobject.result.Condition);
        Console.WriteLine("PLE: " + rootobject.result.PLE);
    }
    else
    {
        Console.WriteLine("---------------");
        Console.WriteLine("NOTHING");
    }
}
catch (Exception)
{
    Console.WriteLine("---------------");
    Console.WriteLine("ERROR");
}

С тех пор я перешел на приложение с графическим интерфейсом, используя MyClass:

class MyClass 
{
    public void MyMethod(int inRUC){
        RootObject rootobject;
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(@"https://www.example.com/api/?get=" + inRUC);
        HttpWebResponse response;

        response = (HttpWebResponse)request.GetResponse();
        Stream stream = response.GetResponseStream();
        StreamReader reader = new StreamReader(stream);
        {
            var json = reader.ReadToEnd();
            rootobject = JsonConvert.DeserializeObject<RootObject>(json);
        }
    }
}

Теперь я хочу получить значение текстовой записи в графической форме и создать экземпляр класса, чтобы получить результаты и напечатать их в текстовых полях той же формы, но я не знаю, как его правильно создать и как чтобы правильно разместить значения, это то, что я сейчас пытаюсь: (txtRuc1) - мой ввод моей формы, а EditText1 - мой вывод моей формы:

private void Button1_ClickBefore(object sboObject, SAPbouiCOM.SBOItemEventArg pVal, out bool BubbleEvent)
{
    if (string.IsNullOrEmpty(txtRuc1.Value.ToString()))
    {
        BubbleEvent = false;
    }
    else
    {
//Ok, I known that it is wrong
        BubbleEvent = true;
        MyClass obj = new Sunat();
        EditText1.Value = obj.MyMethod(txtRuc1.value).rootobject.result.name;
    }
}

Какая будет правильная форма? Visual studio возвращает ошибку: Невозможно преобразовать «строку» в «int» в следующих строках:

obj.MyMethod(txtRuc1.value).rootobject.result.name

1 Ответ

0 голосов
/ 03 сентября 2018

сначала вам нужно MyMethod вернуть RootObject вместо void

public RootObject MyMethod(int inRUC){
    HttpWebRequest request = (HttpWebRequest)WebRequest.Create(@"https://www.example.com/api/?get=" + inRUC);
    HttpWebResponse response;

    response = (HttpWebResponse)request.GetResponse();
    Stream stream = response.GetResponseStream();
    StreamReader reader = new StreamReader(stream);
    {
        var json = reader.ReadToEnd();
        return JsonConvert.DeserializeObject<RootObject>(json);
    }
}

тогда ошибка была вызвана строковым значением txtRuc1.value, но для метода MyMethod необходимо int.

так что вы можете попытаться использовать метод int.TryParse для анализа входного значения до int передачи его.

int para = 0;
int.TryParse(txtRuc1.value,out para);

EditText1.Value = obj.MyMethod(para).rootobject.result.name;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...