将C#ASPNET WebApi对象的属性映射到Angular 2,

Cof*_*old 2 c# web-services naming-conventions asp.net-web-api angular

我重新编写了Angular 2英雄教程,以便在带有Web API的ASP.NET web应用程序中运行,并与该Web API进行通信,而不是内存中的Web API.一切都很好.只剩下一个问题:

在ASP.NET的服务环境和Angular环境中,我使用对象Hero.C#对象中属性的命名约定是使用大写字母开始属性名称.JS中的命名约定是以小写形式启动属性名称.我更喜欢在编码中遵循这些惯例.如果我这样做,对象当然不再在接收站点反序列化了.这通常如何处理?

ASP.NET控制器中的get(数组):

    // GET api/heroes 
public HttpResponseMessage Get()
{
  String heros =  JsonConvert.SerializeObject(GetHeroes().ToArray<Hero>());
  return new HttpResponseMessage()
  {
    Content = new StringContent(heros, System.Text.Encoding.UTF8, "application/json")
  };
}
Run Code Online (Sandbox Code Playgroud)

GetHeroes()返回一个Hero列表:

    public class Hero
{
  public int id { get; set; }
  public string name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

hero.service.ts中的代码:

 getHeroes(): Promise<Hero[]> {
  return this.http.get(this.heroesUrl)
      .toPromise()
      .then(response => response.json() as Hero[])
      .catch(this.handleError);  }
Run Code Online (Sandbox Code Playgroud)

最后是hero.ts中的英雄课:

export class Hero {  id: number;  name: string;}
Run Code Online (Sandbox Code Playgroud)

Web服务为get提供的原始代码是:

[{"id":0,"name":"Zero"},{"id":11,"name":"Mr. Nice"},{"id":12,"name":"Narco"},{"id":13,"name":"Bombasto"},{"id":14,"name":"Celeritas"},{"id":15,"name":"Magneta"}]
Run Code Online (Sandbox Code Playgroud)

问题是如何在C#中继续使用(这会导致问题)

    public class Hero
{
  public int Id { get; set; }
  public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

如果我这样做,我不会得到任何错误.它只返回浏览器中的6个对象,只显示记录的内容.如下所示:

浏览器结果

Dan*_*yen 6

试试这个

public class Hero
{
  [JsonProperty(PropertyName = "id")]
  public int Id { get; set; }
  [JsonProperty(PropertyName = "name")]
  public string Name { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

文档序列化属性