Создатель класса вводит несколько конструкторов классов - PullRequest
0 голосов
/ 27 августа 2018

У меня есть такой код:

public class Paket
{
    public int PaketID { get { return _PaketID; } set { _PaketID = value; } }
    public int ProizvodID { get { return _ProizvodID; } set { _ProizvodID = value; } }
    public double Kolicina { get { return _Kolicina; } set { _Kolicina = value; } }
    public double CenaBezPdv { get { return _CenaBezPdv; } set { _CenaBezPdv = value; } }

    private int _PaketID;
    private int _ProizvodID;
    private double _Kolicina;
    private double _CenaBezPdv;

    public string _errorMessage { get; set; }

    private Paket()
    {

    }
    public Paket(int proizvodID)
    {
        if (proizvodID == null) { throw new Exception("ProizvodID ne moze biti NULL!"); }

        ServicePointManager.Expect100Continue = true;
        ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;

        string url = "https://www.new.termodom.rs/Php/Proizvodi/Paketi/GetOne.php?proizvodid=" + proizvodID;
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();

        string resp = new StreamReader(response.GetResponseStream()).ReadToEnd();

        switch (resp)
        {
            case "0":  //Nije pronadjen proizvod
                _errorMessage = "Paket nije pronadjen u web bazi!";
                break;
            default:
                Paket p = JsonConvert.DeserializeObject<Paket>(resp);
                this._PaketID = p.PaketID;
                this._ProizvodID = p.ProizvodID;
                this._Kolicina = p.Kolicina;
                this._CenaBezPdv = p.CenaBezPdv;
                break;
        }
    }

    public static List<Paket> SviPaketi(int ProizvodID)
    {
        List<Paket> list = new List<Paket>();

        ServicePointManager.Expect100Continue = true;
        ServicePointManager.SecurityProtocol = (SecurityProtocolType)3072;

        string url = "https://www.new.termodom.rs/Php/Proizvodi/Paketi/GetAll.php?proizvodid=" + ProizvodID;
        HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
        HttpWebResponse response = (HttpWebResponse)request.GetResponse();

        string resp = new StreamReader(response.GetResponseStream()).ReadToEnd();

        switch (resp)
        {
            case "0":  //Nije pronadjen proizvod
                break;
            default:
                list = JsonConvert.DeserializeObject<List<Paket>>(resp);
                break;
        }
        return list;
    }
}

Когда я запускаю такую ​​функцию, List<Proizvod> myList = Proizvod.SviPaketi(139) я получаю какую-то ошибку (сейчас я не знаю, какая это была, но это не важно для моего вопроса).

Когда я начал отладку, я увидел, что JsonConvert.DeserializeObject<List<Paket>>(resp); вводит не только private Paket(), которое пусто, но public Paket(int proizvodID), в котором есть некоторый код.

Итак, мой вопрос: почему JsonConvert.DeserializeObject<List<Paket>>(resp); сработал public Paket(int proizvodID), когда я не передал ему никакого параметра?

1 Ответ

0 голосов
/ 27 августа 2018

JSON-десериализатор предпочтет публичный конструктор. Однако вы можете сделать это, используя приватный конструктор, используя ConstructorHandling. Проверьте это пример

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...