2013-08-05 5 views
8

Ich arbeite an einer REST-API in ASP.NET MVC, wo der resultierende serialisierte JSON verwendet Kleinbuchstaben_underscore für Attribute.Benutzerdefinierte Json.NET Contract Resolver für Kleinbuchstaben Unterstrich zu CamelCase

Von einer Klasse Person mit String-Eigenschaften FirstName und Surname, erhalte ich JSON wie folgt:

{ 
    first_name: "Charlie", 
    surname: "Brown" 
} 

Beachten Sie die lowercase_underscore Namen.

Der Vertrag Resolver Ich benutze diese Umwandlung automatisch für mich zu tun ist:

public class JsonLowerCaseUnderscoreContractResolver : DefaultContractResolver 
{ 
    private Regex regex = new Regex("(?!(^[A-Z]))([A-Z])"); 

    protected override string ResolvePropertyName(string propertyName) 
    { 
     return regex.Replace(propertyName, "_$2").ToLower(); 
    } 
} 

Das alles funktioniert gut, aber ich weiß nicht, wie die Rückseite mit Json.NET zu implementieren. So dass zum Beispiel kann ich eine API-Methode wie folgt deklarieren, und sie weiß, eingehende JSON in der Anfrage Körper an das entsprechende Objekt zu konvertieren:

public object Put(int id, [FromBody] Person person) 

Antwort

2

OK, fand die Lösung. Ich habe einen Standardkonstruktor für die Klasse Person vermisst. Sobald ich das getan hatte, funktionierte das Mapping beim Aufruf der Put Methode. In der Tat könnte ich auch den FromBody-Spezifizierer entfernen:

public object Put(int id, Person person) 
Verwandte Themen