.NET-Web-API-Probleme mit der Deserialisierung von JSON-Objekt

Überholte ich ein Projekt wurde entwickelt von einer Firma, die für uns, leider haben wir nicht bekommen, viel Unterstützung und langfristig, wir sollten erreichen, Pflege und Wartung der von uns für Sie. Die Anwendung besteht aus einem einfachen Web-client (HTTP, JavaScript, Knockout-Framework) und einer REST-API Service (.NET 4.5, ASP.NET MVC denke ich).

Derzeit bin ich nur Sie der AUFTRAGGEBER, so sollte der Server weiterhin wie erwartet funktionieren.

Auf dem clientseitiger ich veränderte die Ko-View-Modell ein wenig (zugegeben einige computables und optimierte Darstellung von Werten). Ein View-Modell besteht aus "Fragen" und "Kommentare" (wie ein array über Fragen, es ist ein Bug-tracker in der Tat). Wenn ich ein neues Problem, die Beschreibung ist Hinzugefügt, um einen ersten Kommentar, das ganze Modell ist JSON.stringified und die senden die .NET-API-Service. Ich bewährten mit Firebug, dass das JSON-das wird geschrieben die wie folgt aussieht:

{
   "Id":0,
   "Title":"THis is a title",
   "Comments":[
       {
          "Id":1,
          "Text":"this is the first comment"
       }
   ]
}

Auf der client-Seite habe ich ein "IssueController":

[HttpPost]
public HttpResponseMessage PostIssues( Issue issue ) {
   //issue should already hold the deserialized content of the JSON here,
   //but it only contains 'Id' and 'Title' not the 'Comments' (empty List)
   ...
}

Dem Problem domain model-Objekt hat auch ein array für die Abhaltung Kommentare, aber an diesem Ende seiner bereits leer. Die .NET-code nicht irgendeinen Teil, die explizit analysiert, JSON, soweit ich es verstanden habe, das MVC-Framework wird implizit von gleichen Namen für die Eigenschaft (Ist das richtig?).

Die Deserialisierung bereits gearbeitet als erwartet, so die .NET-Code sollte in Ordnung sein, aber ich sieht, dass ich geändert haben, dass das JSON in einer Weise, dass dieses implizite Zuordnung der Kommentare funktioniert nicht mehr. Leider habe ich nicht viel Erfahrungen mit dem .NET MVC-Framework (oder ist es nur das .NET WebAPI Rahmen, kann Ihnen sogar sagen, dass).

Das sind meine Fragen:

  1. Welche Art von .NETTO-REST-API-Framework ist das? Wie kann ich unterscheiden?
  2. Wie ist das implizite Deserialisierung von JSON zu arbeiten, und was sind Ihre Tücken, zum Beispiel wenn Teile der JSON nicht deserialisiert werden, wie erwartet? Vor allem auf der client-Seite (wie gesagt, ich wusste nicht, ändern Sie den server-code)
  3. Irgendwelche Ideen, was ich getan haben könnte, um die JSON der server mag es nicht mehr? 😉

BEARBEITEN

Problem.cs sieht wie folgt aus (vereinfacht sicher):

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Bo;
using Projects.DomainObjects;

namespace Projects.Models {


public class Issue : DomainObject {

    public Issue() {

        this.Comments = new List<Comment>();
    }

    public long Id { get; set; }

    private string _Title;
    public string Title { get { return _Title; } set { _Title = value; NotifyChanged(); } }

    public List<Comment> Comments { get; set; }
}

Kommentar.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;
using Common;
using Projects.DomainObjects;

namespace Projects.Models {


public class Comment : DomainObject {

    public Comment() {

    }

    public long Id { get; set; }
    public string Text { get; set; }
}
  • Könntest du die Daten-Klassen, wie PostIssues? (Alles, was mit "Id","Text","Kommentare { "Id", "Text"}
  • Ist Kommentare definierte Eigenschaft in der Klasse "DomainObject"?
  • "DomainObject" ist eine abstrakte Klasse, die nur definieren einige wirklich grundlegende Verhaltensweisen, die für das Domain-Model-Klassen. Nichts Interessantes drin, denke ich, außer Sie sagen mir, was ich suchen soll.
  • Sie wusste nicht, definieren Sie eine Anmerkung Eigenschaft des Feldes.
  • Sorry, du hast Recht, war ein Tippfehler aufgrund der übersetzung Deutsch code - > Englisch 😉 korrigiert es
Schreibe einen Kommentar