Typ 'System.String' wird nicht unterstützt, die für die Deserialisierung des Arrays
Habe ich Probleme mit der Deserialisierung ein verschachteltes array von JSON-Objekten in c# mit JavascriptDeserializer oder NewtonJSON. Ich habe überall gesucht hier und versuchte vorgeschlagen behebt, aber es gibt mir immer dieses:
Bearbeiten Hinzugefügt vollständige Antwort Fehler
{
"Message": "Type 'System.String' is not supported for deserialization of an array.",
"StackTrace": " at System.Web.Script.Serialization.ObjectConverter.ConvertListToObject(IList list, Type type, JavaScriptSerializer
serializer, Boolean throwOnError, IList& convertedList)
at System.Web.Script.Serialization.ObjectConverter.ConvertObjectToTypeInternal(Object o, Type type, JavaScriptSerializer
serializer, Boolean throwOnError, Object& convertedObject)\r\n
at System.Web.Script.Serialization.ObjectConverter.ConvertObjectToTypeMain(Object o, Type type, JavaScriptSerializer
serializer, Boolean throwOnError, Object& convertedObject)\r\n
at System.Web.Script.Services.WebServiceMethodData.StrongTypeParameters(IDictionary`2 rawParams)\r\n
at System.Web.Script.Services.RestHandler.InvokeMethod(HttpContext context, WebServiceMethodData methodData,
IDictionary`2 rawParams)\r\n
at System.Web.Script.Services.RestHandler.ExecuteWebServiceCall(HttpContext context, WebServiceMethodData methodData)",
"ExceptionType": "System.InvalidOperationException"
}
JSON sendet es an den webservice endet so Aussehen:
{
"ProfileEntries": [
{
"TypeId": "C",
"CodeId": "HEARTDZ ",
"StudComment": "testComment"
},
{
"TypeId": "C",
"CodeId": "HIBLOOD "
},
{
"TypeId": "F",
"CodeId": "MARFANF ",
"StudComment": "testComment"
},
{
"TypeId": "F",
"CodeId": "MITRALF "
}
]
}
Den Grund sehen Sie einige Objekte, die ohne "StudComment" ist, weil ich bin mit Knock-out auf einen Wert speichern, der ursprünglich nicht Teil des Objekts sind, wenn geladen.
Meine web-service im Grunde tut dies, um eine Liste von JSON deserialisiert Bearbeiten Hinzugefügt name der Methode
public void SaveProfileEntries(string ProfileEntries)
{
var healthInfoProfileEntries = new JavaScriptSerializer().Deserialize<HealthEntries>(ProfileEntries);
Diese sind die Klassen, die ich zum Deserialisieren der Daten:
public class HealthEntries
{
[JsonProperty("ProfileEntries")]
public List<HealthEntry> ProfileEntries { get; set; }
}
public class HealthEntry
{
[JsonProperty("TypeId")]
public string TypeId { get; set; }
[JsonProperty("CodeId")]
public string CodeId { get; set; }
[JsonProperty("StudComment")]
public string StudComment { get; set; }
}
Es ist verwirrend, weil, wenn ich es testen mit VS unit-tests, es funktioniert perfekt, aber wenn ich es in meine website, es gibt mir die gleichen InvalidOperationException
Habe ich versucht, NewtonJSON mit dieser Methode, aber es funktioniert entweder nicht
var healthInfoProfileEntries = (HealthEntries)JsonConvert.DeserializeObject(ProfileEntries, typeof(HealthEntries));
Jede Hilfe ist willkommen, danke.
- Ist der name der variable mit JSON-string, den Sie übergeben, in der Methode Deserialisieren, ProfileEntries?
- Ja, ich habe sicher es war die gleiche, oder es würde mir ein Parameter-Fehler
- Könnten Sie den vollständigen Fehler-Daten, die in Ihrer Frage?
- Ich habe es jetzt
Du musst angemeldet sein, um einen Kommentar abzugeben.
I figured it out, dachte, ich würde teilen, für die Referenz. Ich landete loszuwerden, das Klassen für die JSON-Deserialisierung (irrelevant Schritt, dies zu beheben), sondern verändert die Parameter von einzelnen string zu array von strings, die die web-service-Funktion "Speichern", um diese
dies ist, wie die JSON-array integriert ist, auf meiner client-Seite (mit Knock-out, aber leicht austauschbar mit regelmäßigen javascript):