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());
我的 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());