Ich habe ein wirklich verwirrendes Problem in Bezug auf das Zuordnen von Daten zu einem Modell in meiner Web-API. Es ist ein bisschen komplex, also lassen Sie es mich wissen, wenn ich es nicht gut genug erklärt habe und ich werde mein Bestes geben, um es auszuarbeiten.Web-API-Aufruf von Accessor für alle Eigenschaften während der Deserialisierung von JSON
See Edit 2, das Problem
Anwendung geändert hat Ich habe eine MVC 5, bei dem der Benutzer Formulardaten und die Daten einreicht wird einem Modell abgebildet automatisch basierend auf der die Namen der Felder auf passende JSON mit den Namen der Modellmitglieder. wenn die eingehende JSON für Benutzername ist beispielsweise in der Form:
{Id=0, Name=testName}
Dann wird es ein Modell (zB Name nur) UsernameModel
genannt werden, die ein int id
und string name
unter anderen Eigenschaften hat, die nicht braucht aus JSON gemappt werden (es gibt eine Anzahl dieser Modelle für eine Anzahl verschiedener Formen).
Ich bin nicht sicher, wie nützlich es sein wird, aber ich bemerkte, dass der Anruf an der Unterseite des Stapels Spur
System.Web.Http.Validation.DefaultBodyModelValidator.ValidateNodeAndChildren(
ModelMetadata metadata, ValidationContext validationContext, Object container,
IEnumerable`1 validators)
diese Validation
etwas mit meinem Problem zu tun haben könnte, war?
Keiner von uns hat eine Idee, warum dies passiert und nur auf meiner Maschine passiert. Irgendwelche Ideen/Vorschläge? Dinge zu versuchen? Möglichkeiten, den Fehler einzugrenzen?
Edit:another question gefunden, die in Zusammenhang stehen können, aber es ist wirklich seltsam, dass dies nur auf meinem Computer auftritt, während in diesem Beitrag es nur ein generelles Problem war.
Bearbeiten 2: Ich habe das Problem eingegrenzt, und habe jetzt ein viel spezifischeres Problem. Ich habe entdeckt, dass auf meinem Computer die Web-API-Zuordnung des JSON zu dem C# -Objekt (oder einem anderen Prozess, der während des Mappings aufgerufen wird) die get()
für jede Eigenschaft im Prozess des Mappings des Objekts aufruft. Aus diesem Grund wird die Ausnahme ausgelöst. Eine der Eigenschaften löst eine Ausnahme aus, wenn der get()
(von Entwurf) aufgerufen wird. Auf anderen Computern wird die get()
nur für die Eigenschaften aufgerufen, die von JSON zugeordnet werden, und wir sind nicht sicher warum.
bearbeiten 3 (revised): In System.Web.Http.Validation
Erforschung fand ich this post die Frage, wie sie zu deaktivieren. Ich folgte den Anweisungen in der akzeptierten Antwort und deaktivierte die Standardvalidierung, und mein Problem ging weg! Ich bin immer noch mit der Frage, warum das zwischen zwei Computern anders sein würde, aber zumindest komme ich irgendwo hin!
Es sieht eher für mich aus, dass der Fehler nicht das Mapping ist, es ist die Validierung. Die Validierung "weiß" nicht, welche Eigenschaften aus JSON gemappt wurden oder nicht. Es weiß nur, dass es ein Objekt hat und validiert seine Eigenschaften. Können Sie versuchen, die Überprüfung aus der Eigenschaft zu entfernen, die eine NotImplementedException auslöst? Ich schätze, wenn Sie es nicht bestätigen, wird es nicht angerufen. Das erklärt nicht den Unterschied zwischen zwei Computern, aber es könnte Sie dazu bringen, an einem anderen Ort zu suchen. –