2016-06-28 6 views
0

Ich bin hier ein Json libary herunterladen: http://www.pozzware.com/pozzware/Corsi/Programmazione/VB.NET/JSON%20Library.aspxvb.net Kein parameterlosen Konstruktor für dieses Objekt definiert

Das ist meine Klasse an meinem Projekt:

Imports PW.JSON 

Public Class Prova 

Private _id As Integer 
Private _name As String 
Private _valido As Boolean 
Private _subObject As Prova 
Private _numero As Integer 
Private _numeroDec As Double 
Private _array() As String 

Public Property ID() As Integer 
    Get 
     Return _id 
    End Get 
    Set(ByVal value As Integer) 
     _id = value 
    End Set 
End Property 

Public Property Name() As String 
    Get 
     Return _name 
    End Get 
    Set(ByVal value As String) 
     _name = value 
    End Set 
End Property 

Public Property Valido() As Boolean 
    Get 
     Return _valido 
    End Get 
    Set(ByVal value As Boolean) 
     _valido = value 
    End Set 
End Property 

Public Property SubObject() As Prova 
    Get 
     Return _subObject 
    End Get 
    Set(ByVal value As Prova) 
     _subObject = value 
    End Set 
End Property 

Public Property NumeroDec() As Double 
    Get 
     Return _numeroDec 
    End Get 
    Set(ByVal value As Double) 
     _numeroDec = value 
    End Set 
End Property 

Public Property Array() As String() 
    Get 
     Return _array 
    End Get 
    Set(ByVal value As String()) 
     _array = value 
    End Set 
End Property 

Public Sub New(ByVal ID As Integer, ByVal Name As String) 
    _id = ID 
    _name = Name 
End Sub 

Public Function SomeMethod() As String 
    Return "Method: " & _id 
End Function 

End Class 

Und dies ist mein Code:

Sub PasteJsonExam() 
    Dim strJSON As String = "{""NumeroDec"": 100.34, ""Name"": ""Nome Object"", " & _ 
          " ""Array"": [""A"", ""E"", ""I"", ""O"", ""U""], " & _ 
          " ""SubObject"": {""NumeroDec"": 0, ""Name"": ""Nome - SubObject"", " & _ 
          " ""Array"": null, ""SubObject"": null, ""Valido"": false, ""ID"": 2}, " & _ 
          " ""Valido"": true, ""ID"": 1}" 

    Dim objprova As Prova 
    objprova = PW.JSON.JSONHelper.StringToObject(strJSON, GetType(Prova)) 
    MsgBox(objprova.Name) 
    MsgBox(objprova.SubObject.Name) 
End Sub 

Wenn ich nenne das Unter i Fehler bekam:

Für dieses Objekt wurde kein parameterloser Konstruktor definiert.

An dieser Linie:

objprova = PW.JSON.JSONHelper.StringToObject(strJSON, GetType(Prova)) 

Ich bin kein professonal in VB.net so hoffe ich jemand für mich erklären, warum ich diesen Fehler hätte und wie kann ich dieses Problem beheben.

+2

Verwenden NewtonJson statt. Install-Package Newtonsoft.Json –

+0

Fügen Sie einfach einen Sub New() ohne Parameter hinzu –

+0

Fast jeder, einschließlich ASP.NET Web API-Projekte, verwendet JSon.NET. Warum versuchen Sie ein Snippet zu verwenden, das vor 6 Jahren geschrieben wurde? Beispielsweise behandelt das Snippet keine Daten –

Antwort

1

Wahrscheinlich StringToObject Methode versuchen, eine Instanz von Prova zu erstellen. Dazu ruft er den (parameterlosen) Standardkonstruktor des Typs auf. Aber in der Klasse, die Sie definiert gibt es keine parameterlosen Konstruktor, müssen Sie nur:

Public Class Prova 
    ' Other fields and methods 
    Public Sub New(ByVal ID As Integer, ByVal Name As String) 
     _id = ID 
     _name = Name 
    End Sub 
    ' Other fields and methods 
End Class 

die Methode arbeiten Sie wie einen parameterlosen Konstruktor definieren müssen vermieten:

Public Class Prova 
    ' Other fields and methods 
    Public Sub New() 
    End Sub 

    Public Sub New(ByVal ID As Integer, ByVal Name As String) 
     _id = ID 
     _name = Name 
    End Sub 
    ' Other fields and methods 
End Class 
+0

Sehr geehrter Herr! bitte wie kann ich das beheben? –

+0

@ DươngTrần Wie ich gepostet habe, müssen Sie einen parameterlosen Konstruktor definieren wie 'Public Sub New()' –

+0

Hallo! Ich kann nicht bearbeiten, weil ich mehr Sub-müssen so anrufen: 'Sub JoinJsonExam() Dim objprova als neue Prova (1," Nome Objekt ") objprova.Array = Split (" AEIOU ") objprova.NumeroDec = 100,34 objprova.SubObject = New Prova (2, "Nome - SUBOBJECT") objprova.Valido = True MsgBox (PW.JSON.JSONHelper.ObjectToString (objprova)) End Sub' –

0

Nun denke ich, dass die von Ihnen verwendete Bibliothek nicht die beste Wahl ist, aber wenn Sie Ihr Programm ausführen möchten, müssen Sie einen Standardkonstruktor (ein Konstruktor ohne Parameter) hinzufügen. Das ist, weil wahrscheinlich die Bibliothek verwendet Reflection

Dies ist die Klasse mit dem Standard-Konstruktor:

Imports PW.JSON 

Public Class Prova 

Private _id As Integer 
Private _name As String 
Private _valido As Boolean 
Private _subObject As Prova 
Private _numero As Integer 
Private _numeroDec As Double 
Private _array() As String 

Public Property ID() As Integer 
    Get 
     Return _id 
    End Get 
    Set(ByVal value As Integer) 
     _id = value 
    End Set 
End Property 

Public Property Name() As String 
    Get 
     Return _name 
    End Get 
    Set(ByVal value As String) 
     _name = value 
    End Set 
End Property 

Public Property Valido() As Boolean 
    Get 
     Return _valido 
    End Get 
    Set(ByVal value As Boolean) 
     _valido = value 
    End Set 
End Property 

Public Property SubObject() As Prova 
    Get 
     Return _subObject 
    End Get 
    Set(ByVal value As Prova) 
     _subObject = value 
    End Set 
End Property 

Public Property NumeroDec() As Double 
    Get 
     Return _numeroDec 
    End Get 
    Set(ByVal value As Double) 
     _numeroDec = value 
    End Set 
End Property 

Public Property Array() As String() 
    Get 
     Return _array 
    End Get 
    Set(ByVal value As String()) 
     _array = value 
    End Set 
End Property 

' This is the default constructor the library should need' 
Public Sub New() 
End Sub 

Public Sub New(ByVal ID As Integer, ByVal Name As String) 
    _id = ID 
    _name = Name 
End Sub 

Public Function SomeMethod() As String 
    Return "Method: " & _id 
End Function 

End Class 
Verwandte Themen