json - Varför konverterar JSONResult egenskapsnamn i Camel case till små bokstäver?
Projektöversikt
Jag arbetar på ett projekt som är baserat på:
1- Angular 6
2- Aspnet Core 2.1
Scenario
Jag gör ett GET-anrop med följande kod i Angular
let reqHeader = new HttpHeaders({ 'Content-Type': 'application/json' });
this.http.get(this._URL).subscribe(
(data => {
this._engineersList = data[0];
this._shiftList = data[1];
console.log(data[0])
}), error => this.error
);
class Engineers {
public ID: number;
public Name: string;
}
class Shifts {
public ID: number;
public EmployeeID: number;
public EmployeeName: string;
public ShiftName: string;
public ShiftTime: string;
}
Eftersom mina egenskapsnamn är i Camel case. Uppenbarligen binder jag samma som i min HTML som nedan:
<tbody>
<tr *ngFor="let engineer of _engineersList">
<td>
{{engineer.Id}}
</td>
<td>
{{engineer.Name}}
</td>
</tr>
</tbody>
Jag får följande output (Ingen databindning):
Men när jag konverterar mina Camel case-egenskaper till små bokstäver som:
<tbody>
<tr *ngFor="let engineer of _engineersList">
<td>
{{engineer.id}}
</td>
<td>
{{engineer.name}}
</td>
</tr>
</tbody>
Resultat
När jag kontrollerar returresultatet av min GET-förfrågan i webbläsarens konsol upptäckte jag att mitt observerbara returnerar egenskaper i små bokstäver.
Jag verifierar detta också på serversidan, men det hittades inga sådana problem. Servern returnerar mig korrekt data med korrekt Camel case.
Vad jag försöker säga är varför mitt JSON-resultat visar och binder mina egenskapsnamn med små bokstäver? Som du kan se högst upp i detta inlägg har jag skapat en modellklass och deras egenskaper är i Camel Case, de borde binda sig som de är i min HTML men det fungerar inte. Hjälp mig gärna med detta, vad gör jag fel i min kod. Hoppas jag förklarade min fråga kortfattat.
Svar #1
I ASP.NET Core kan du lägga till detta i Startup.cs
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc()
.AddJsonOptions(options => options.SerializerSettings.ContractResolver = new DefaultContractResolver());
}
Svar #2
Har du försökt leka med mellanprogramsegenskaperna? Du kanske vill tvinga Camel- eller PascalCase här?
protected void Application_Start()
{
HttpConfiguration config = GlobalConfiguration.Configuration;
config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
config.Formatters.JsonFormatter.UseDataContractJsonSerializer = false;
}



