2012-04-08 9 views
1

Die Erweiterungsmethoden aufrufen:Response.AsJson doen't Arbeit, wenn es aus einer Funktion in NancyFx

Response.AsJson 
Response.AsXml 

funktioniert gut, wenn es aus dem constractor wie der Aufruf:

public class TweetModule : NancyModule 
    { 
    public TweetModule() 
      : base("/") 
     { 

      Post["/{action}.json/"] = parameters => 
      { 
       return Reponse.Asjson(new {output:parameters.action}); // OK 
      } 
     } 
    } 

Aber wenn ich rufe es von einer Funktion wie folgt aus:

public class TweetModule : NancyModule 
    { 
    public TweetModule() 
      : base("/") 
     { 

      Post["/{action}.{format}/"] = parameters => 
      { 
       return GetResponse(parameters.action,parameters.format); // Error 
      } 
     } 

     public Response GetResponse(string action,string format) 
     { 
      if (format == "json") 
      return Response.AsJson(new {output:action}); // error 
      else 
      return Response.AsXml(new {output:action}); // error 
     } 


    } 

ich erhalte diese Ausnahme:

<> f__AnonymousType0`1 [System.String] kann nicht serialisiert werden, da keinen parameterlosen Konstruktor hat.

ein Ratschlag?

Antwort

3

Na das funktioniert ganz gut. Das Problem ist, dass Ihre aufgenommenen Parameter genannt {fortmat} und Sie dann entlang parameters.format passieren, die aufgrund der Tippfehler nie erfasst

Und ich muss darauf hinweisen, dass Ihr Code nicht einmal kompilieren seit Funktion ist kein gültiges Schlüsselwort in C#, ich nahm nur an, dass Sie eigentlich sagen wollten öffentlichen statt.

Hoffe, das hilft

+0

Danke, aber immer noch der gleiche Fehler erscheint. –

+0

Ich versuchte es letzte Nacht auf meiner Maschine und es funktionierte (mit den 0,10 nuggets von Nancy). Welche Werte geben Sie ein, um den Fehler zu erhalten? Laufen Sie auch auf dem ASP.NET-Host? – TheCodeJunkie

+0

Übrigens sollten Sie den Aufruf von: base ("/") entfernen, der standardmäßig als implizit definiert ist. – TheCodeJunkie