Ich habe ein Problem, wenn Deserialisieren diesen json string:Deserialisieren JSON Text mit Array von innen in Visual Basic webservice
{
"UserName": "Person1",
"TechOpinion": "Under Repair",
"CodeStatus": "0",
"DateYear": "2016",
"TechCode": "Person2",
"CReception": [{
"CodeRecep": "146001"
}, {
"CodeRecep": "146002"
}, {
"CodeRecep": "146003"
}, {
"CodeRecep": "146004"
}]
}
ich eine gespeicherte Prozedur mit Root-Wert und einen der CodeRecep Werte jedes Mal aufgerufen werden soll (nach Anzahl in zwei getrennten Class-Dateien
erste von CodeRecep die gespeicherte Prozedur ruft Werte {{4 mal in dieser Probe}})
ich zwei Klasse für json Typ schreiben Wurzel Werte wie folgt zu halten:
Public Class ArrayJSONParameter
Dim _UserName As String
Dim _TechOpinion As String
Dim _CodeStatus As String
Dim _DateYear As String
Dim _TechCode As String
Dim _CReception As CodeReceptions
Public Property UserName() As String
Get
Return _UserName
End Get
Set(ByVal value As String)
_UserName = value
End Set
End Property
Public Property TechOpinion() As String
Get
Return _TechOpinion
End Get
Set(ByVal value As String)
_TechOpinion = value
End Set
End Property
Public Property CodeStatus() As String
Get
Return _CodeStatus
End Get
Set(ByVal value As String)
_CodeStatus = value
End Set
End Property
Public Property DateYear() As String
Get
Return _DateYear
End Get
Set(ByVal value As String)
_DateYear = value
End Set
End Property
Public Property TechCode() As String
Get
Return _TechCode
End Get
Set(ByVal value As String)
_TechCode = value
End Set
End Property
Public Property CReception() As CodeReceptions
Get
Return _CReception
End Get
Set(ByVal value As CodeReceptions)
_CReception = value
End Set
End Property
End Class
und die zweite innerhalb Array wie folgt zu halten:
Public Class CodeReceptions
Dim _CodeRece As String
Public Property CodeRecep() As String
Get
Return _CodeRece
End Get
Set(ByVal value As String)
_CodeRece = value
End Set
End Property
End Class
mein Haupt-Code-Methode in webservice ist:
<WebMethod()> _
Public Function JsonSample(ByVal jsonTxt As String) As String
Dim _JSONArray As ArrayJSONParameter = JsonConvert.DeserializeObject(Of ArrayJSONParameter)(jsonTxt)
Return "sample text" '_JSONArray.UserName
End Function
aber wenn ich versuche ich den Webservice mit meinem JSON-String auszuführen i Gesicht diesen Fehler:
Newtonsoft.Json.JsonSerializationException: Cannot deserialize the current JSON array (e.g. [1,2,3]) into type 'CodeReceptions' because the type requires a JSON object (e.g. {"name":"value"}) to deserialize correctly.
To fix this error either change the JSON to a JSON object (e.g. {"name":"value"}) or change the deserialized type to an array or a type that implements a collection interface (e.g. ICollection, IList) like List<T> that can be deserialized from a JSON array. JsonArrayAttribute can also be added to the type to force it to deserialize from a JSON array.
Path 'CReception', line 1, position 119.
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.EnsureArrayContract(JsonReader reader, Type objectType, JsonContract contract) in C:\Development\Releases\Json\Working\Newtonsoft.Json\Working-Signed\Src\Newtonsoft.Json\Serialization\JsonSerializerInternalReader.cs:line 823
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateList(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, Object existingValue, String id) in C:\Development\Releases\Json\Working\Newtonsoft.Json\Working-Signed\Src\Newtonsoft.Json\Serialization\JsonSerializerInternalReader.cs:line 848
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue) in C:\Development\Releases\Json\Working\Newtonsoft.Json\Working-Signed\Src\Newtonsoft.Json\Serialization\JsonSerializerInternalReader.cs:line 293
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.SetPropertyValue(JsonProperty property, JsonConverter propertyConverter, JsonContainerContract containerContract, JsonProperty containerProperty, JsonReader reader, Object target) in C:\Development\Releases\Json\Working\Newtonsoft.Json\Working-Signed\Src\Newtonsoft.Json\Serialization\JsonSerializerInternalReader.cs:line 1018
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.PopulateObject(Object newObject, JsonReader reader, JsonObjectContract contract, JsonProperty member, String id) in C:\Development\Releases\Json\Working\Newtonsoft.Json\Working-Signed\Src\Newtonsoft.Json\Serialization\JsonSerializerInternalReader.cs:line 2393
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateObject(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue) in C:\Development\Releases\Json\Working\Newtonsoft.Json\Working-Signed\Src\Newtonsoft.Json\Serialization\JsonSerializerInternalReader.cs:line 485
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.CreateValueInternal(JsonReader reader, Type objectType, JsonContract contract, JsonProperty member, JsonContainerContract containerContract, JsonProperty containerMember, Object existingValue) in C:\Development\Releases\Json\Working\Newtonsoft.Json\Working-Signed\Src\Newtonsoft.Json\Serialization\JsonSerializerInternalReader.cs:line 291
at Newtonsoft.Json.Serialization.JsonSerializerInternalReader.Deserialize(JsonReader reader, Type objectType, Boolean checkAdditionalContent) in C:\Development\Releases\Json\Working\Newtonsoft.Json\Working-Signed\Src\Newtonsoft.Json\Serialization\JsonSerializerInternalReader.cs:line 196
at Newtonsoft.Json.JsonSerializer.DeserializeInternal(JsonReader reader, Type objectType) in C:\Development\Releases\Json\Working\Newtonsoft.Json\Working-Signed\Src\Newtonsoft.Json\JsonSerializer.cs:line 823
at Newtonsoft.Json.JsonConvert.DeserializeObject(String value, Type type, JsonSerializerSettings settings) in C:\Development\Releases\Json\Working\Newtonsoft.Json\Working-Signed\Src\Newtonsoft.Json\JsonConvert.cs:line 863
at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value, JsonSerializerSettings settings) in C:\Development\Releases\Json\Working\Newtonsoft.Json\Working-Signed\Src\Newtonsoft.Json\JsonConvert.cs:line 820
at Newtonsoft.Json.JsonConvert.DeserializeObject[T](String value) in C:\Development\Releases\Json\Working\Newtonsoft.Json\Working-Signed\Src\Newtonsoft.Json\JsonConvert.cs:line 757
at JSONWS.JsonSample(String jsonTxt)
i verbringen zwei Tage Deserialisieren Fäden in Internet, aber ähnliche Threads verwenden einfachen json Text aber mein Problem ist, innerhalb des Arrays zu lesen. Ich kann nicht die richtige Antwort finden, bitte helfen Sie mir dabei. Warum bekomme ich diesen Fehler? und neben, wie kann ich auf interne Array-Werte im Code zugreifen?
thnx viel Mark. du rettest mein Leben! Ich bin wirklich dank Ihrer Reaktionszeit und JA mein Code funktioniert gut. Bitte helfen Sie mir mehr bei der Auswahl von Array oder Liste. Was ist deiner Meinung nach in meinem Fall besser? –
Wenn Sie Elemente zur 'CReception'-Sammlung hinzufügen, würde ich eine' List' verwenden. Wenn nicht, liegt es wahrscheinlich an den persönlichen Vorlieben. Persönlich verwende ich fast immer Listen anstelle von Arrays. – Mark
danke Mark. Ich denke, dass ich in Zukunft einige Artikel hinzufügen muss, aber nicht jetzt. aber es ist besser, dass ich ab jetzt ein Element anstelle eines Arrays verwende. Danke für den Erfahrungsaustausch. –