Angular 2 RC 和 ASP.NET 核心 JsonResult 更改返回对象的大写(使用 Observables)

Angular 2 RC and ASP.NET Core JsonResult changes capitalisation of returned objects (using Observables)

我的 C# 模型和我的 Angular 2 RC 对象都有大写对象。但是,当返回 JsonResult 时,对象的 属性 名称的第一个大写字母变为小写。在我的代码中似乎没有任何地方应该将大写字母更改为小写字母。令人困惑。

Gender.cs

public class Gender
{
    [Key]
    public short GenderId { get; set; }
    public string GenderName { get; set; }
}

Gender.ts(查看)

export interface Gender {
    GenderId: number;
    GenderName: string;
}

结果是我的 HTML 必须使用小写首字母:{{item.genderName}} 即使 Intellisense 使用 {{item.GenderName}} 并使用什么 Intellisense,以及代码似乎正确的内容, 阻止显示结果..

app.component.html

<div style="position:relative">
<h1>Code First Database Migrations</h1>
<ul *ngFor="let item of items">
    <li>{{item.genderName}}</li>
</ul>

这是我的Controller

[HttpGet]
    public JsonResult Get()
    {
        var genders = _context.Genders;

        var query = from g in genders
                    select new { g.GenderId, g.GenderName };

        List<Gender> GenderList = new List<Gender>();

        foreach (var item in query)
        {
            Gender gender = new Gender();
            gender.GenderId = item.GenderId;
            gender.GenderName = item.GenderName;
            GenderList.Add(gender);

        }

        return Json(GenderList);
    }

这是我的 DataService:

data.service.ts

import { Injectable, Inject } from '@angular/core';
import { Http, Response } from '@angular/http';
import 'rxjs/add/operator/map';
import { Observable } from 'rxjs/Observable';
import { Gender } from './gender';
import 'rxjs/add/operator/share';

@Injectable()
export class DataService {
public collection$: Observable<Gender[]>;
private _collectionObserver: any;

constructor( @Inject(Http) private http: Http) {
    this.http = http;
    this.collection$ = new Observable(observer => {
        this._collectionObserver = observer;
    }).share();

}

getItems() {
    this.http.get('api/character').map((res: Response) => res.json()).subscribe(items => {
        this._collectionObserver.next(items);
        alert(JSON.stringify(items));
    });
}

}

app.component.ts

import { Inject, Component, Input, OnInit } from '@angular/core';
import { DataService } from './data.service';
import { Gender } from './gender';

@Component({
    selector: 'app',
    templateUrl: 'app/app.component.html'
})
export class AppComponent implements OnInit {
    private items: Gender[];

    constructor( @Inject(DataService) public dataService: DataService) {
    }

    ngOnInit() {
        this.dataService.collection$.subscribe(latestCollection => {
            this.items = latestCollection;
        });
        this.dataService.getItems();
    }
}

公告中对此进行了介绍https://github.com/aspnet/Announcements/issues/194

要从约定修改 Startup.cs ConfigureServices 方法:

services
    .AddMvc()
    .AddJsonOptions(options => options.SerializerSettings.ContractResolver = new DefaultContractResolver());