2016-07-24 12 views
0

Ich versuche, eine mobile Service-App in eine Webanwendung zu portieren. Dazu habe ich eine neue Webanwendung erstellt und den entsprechenden Code vom funktionierenden mobilen Dienst in die neue Webanwendung kopiert, die ich erstellt habe (unter Verwendung der Vorlage für mobile Apps.) Ich habe den folgenden Code in meiner Startmethode in der neuen Anwendung:Selbstreferenzierende Schleife für Eigenschaft in Webanwendung erkannt

public partial class Startup 
{ 
    public static void ConfigureMobileApp(IAppBuilder app) 
    { 
     HttpConfiguration config = new HttpConfiguration(); 

     new MobileAppConfiguration() 
      .UseDefaultConfiguration() 
      .ApplyTo(config); 

     // Use Entity Framework Code First to create database tables based on your DbContext 
     Database.SetInitializer(new MobileServiceInitializer()); 
     config.IncludeErrorDetailPolicy = IncludeErrorDetailPolicy.Always; 


     config.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Serialize; 
     config.Formatters.JsonFormatter.SerializerSettings.PreserveReferencesHandling = Newtonsoft.Json.PreserveReferencesHandling.Objects; 
     app.UseWebApi(config); 
     MobileAppSettingsDictionary settings = config.GetMobileAppSettingsProvider().GetMobileAppSettings(); 
    } 
} 

die config.Formatters wurden aus der ursprünglichen Anwendung kopiert, die das Unternehmen und seine Kinder in die json Ausgang des api Controller zurückgibt.

In der neuen Anwendung, die ich das hinzufügen musste [MobileAppController] zu Meine API-Controller Ich erhalte den folgenden Fehler vom Controller in der Webapplikations-App: Selbstreferenzierungsschleife erkannt für Eigenschaft Tee ms (Das Modell wurde Teams -> Spieler und Spieler hat eine Mannschafts-ID)

auf dieser detaillierten Frage Basierend: Self referencing loop detected - Getting back data from WebApi to the browser

Der obige Code sollte funktionieren, wie es in meinem mobilen Service App tut. Die Webdienst-App scheint den Wert config.Formatters zu ignorieren, da ich jeden Wert in der obigen Frage ausprobiert habe, aber immer noch denselben Fehler erhalte.
Wenn ich das [JSON Ignore] -Attribut vor der Child-Liste platzieren, bekomme ich den Fehler nicht, aber bekomme auch die Kinder nicht zurück in den JSON. Wie kann ich diese Webanwendung dazu bringen, die Formatierungswerte zu akzeptieren?

+1

Ist dies ein dup von [Azure Mobile App Anpassung json Serialisierung] (https://stackoverflow.com/questions/36941834/azure-Mobile-App-Anpassung-JSON-Serialisierung)? – dbc

+1

Alternativ können Sie Attribute direkt zu Ihren Klassen hinzufügen, z. B. [JsonPropertyAttribute.ItemIsReference] (http://www.newtonsoft.com/json/help/html/P_Newtonsoft_Json_JsonPropertyAttribute_ItemIsReference.htm), um 'PreserveReferencesHandling' für Auflistungselemente zu erzwingen. – dbc

+2

Vielen Dank für Ihre nützlichen Kommentare. Vielen Dank @dbc, dass Sie mich auf diese Frage hingewiesen haben. Ich habe 3 Tage gesucht und habe es nicht gefunden. Also anscheinend hatte ich Recht, dass die mobile App die JSON-Formatierer ignoriert. Sie lassen mich zu diesem Beitrag [Json net Fehler]. Das Hinzufügen des Attributs [JsonObject (IsReference = true)] vor den DTOs löste das Problem mit minimalem Code. [Json net Fehler]: http: //stackoverflow.com/questions/7397207/json-net-error-self-referencing-loop-detected-for-type/ –

Antwort

0

Hank Sie für Ihre nützlichen Kommentare. Vielen Dank @dbc, dass Sie mich auf diese Frage hingewiesen haben. Ich habe 3 Tage gesucht und habe es nicht gefunden. Also anscheinend hatte ich Recht, dass die mobile App die JSON-Formatierer ignoriert. Sie lassen mich zu diesem Beitrag [Json net Fehler]. Das Hinzufügen des Attributs [JsonObject (IsReference = true)] vor den DTOs löste das Problem mit minimalem Code. [json net error]: stackoverflow.com/questions/7397207/ ... - Haim Katz 24. Juli um 13:41

+0

wie pro inkers anfrage –