2016-11-03 2 views
2

Auf meiner Client-Seite ich einen Ajax-Aufruf wie unten habe:JsonResults gibt Enum-Wert statt String-Darstellung

  $.ajax({ 
       url: "Controller/ListResult", 
       type: 'POST', 
       contentType: "application/json;charset=utf-8", 
       data: JSON.stringify({ 
        Id: ObjectId, 
        SessionKey: sessionManager.getSessionKey() 
       }), 
       dataType: "json", 
       success: function (result) { 
       var test = results; 
        } 
       } 
      }); 

im Controller habe ich eine Methode wie folgt:

 [HttpPost] 
     public JsonResult ListResult(string Id, string SessionKey) 
     { 
     IBl biz = new BL(); 
     var result = biz.GetResults(Id,SessionKey); 
     return Json(result); 
     } 

Das Problem ist das das Ergebnis, dass der Controller zurückgibt, ist ein Objekt, das wenige Enum Eigenschaften (mit ihrer Zeichenfolgendarstellung als Wert) hat . Wenn es jedoch die ErfolgFunktion im Ajax-Aufruf erreicht, sind die Enums nicht mehr String-Darstellung, und stattdessen wurden sie irgendwie in ihre int-Werte konvertiert. Wie kann ich das vermeiden? und behalten Sie die Zeichenfolgendarstellung auf der Javascriptseite bei.

+0

Was ist 'sessionManager.getSessionKey()'? –

+0

@StephenMuecke, es ist eine interne Funktion zum Abrufen der Sitzung, aber dies sollte nichts beeinflussen. Weil es wie erwartet funktioniert. – Benjamin

+4

Sie müssen ein anonymes Objekt zur Darstellung Ihrer Daten erstellen und 'ToString()' in den Enum-Eigenschaften verwenden (der 'JavascriptSerializer' serialisiert Enums auf ihre numerischen Werte und nicht auf ihre String-Darstellung) –

Antwort

4

Statt der Rückkehr var result einige Ergebnis Entitätsklasse erstellen und Sie können mit StringEnumConverter die Enum-Eigenschaft dort markieren.

class Result 
{ 
    [JsonConverter(typeof(StringEnumConverter))] 
    public EnumType EnumProperty { get; set; } 

    *****other properties goes here**** 
} 

Als Stephen schlug das funktioniert, wenn man Json.NET als Serializer verwendet.

+0

Nur wenn OP verwendet Json.NET als Serializer :) –

+0

Sie haben Recht, ich habe aktualisiert. –

3

versuchen, etwas wie folgt aus:

var result = biz.GetResults(Id,SessionKey); 
    var modifiedResult = new 
     { 
     ..., 
     r.EnumValue.ToString(), 
     ... 
     }; 
    return Json(modifiedResult); 
+0

Wie gesagt, das Ergebnis im Controller ist bereits String-Darstellung, und es ist nicht erforderlich, ToString() es. Es wird nur in den int-Wert konvertiert, wenn es die Javascript-Seite erreicht. – Benjamin

+0

Wenn die Eigenschaften des vom Controller zurückgegebenen Ergebnisses Enums sind, konvertiert der Aufruf von 'return Json (result)' diese Zeichenfolgen in ihre ganzzahligen Werte zurück. Wenn Sie das Ergebnis zuerst in einen anonymen Typ projizieren, sind die Eigenschaften nur Zeichenfolgen. –

+1

Fast richtig - aber Sie können nicht '.Select()' auf ein einzelnes Objekt verwenden (was OP sagte die 'GetResults()' Methode gibt –

Verwandte Themen