2

Angular 2英雄チュートリアルを再プログラミングして、ASP.NET Webアプリケーション内でWeb APIで実行し、メモリ内Web APIではなくそのWeb APIと通信するようにしました。 すべてうまくいきます。 1つの質問のみが残ります:C#ASPNET WebApiオブジェクトのAngular 2へのマッピングプロパティ

ASP.NETのサービス環境とAngular環境では、私はオブジェクトHeroで作業します。 C#オブジェクトのプロパティの命名規則は、大文字でpropertynameを開始することです。 JSの命名規則は、小文字でpropertynameを開始することです。私はコーディングでこの規則に従うことを好む。 これを行うと、オブジェクトは受信側でもはや正しくデシリアライズされません。 これは通常どのように処理されますか?

GET ASP.NETコントローラ内(アレイ):

// 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") 
    }; 
} 

GetHeroes()はヒーローのリストを返す:

public class Hero 
{ 
    public int id { get; set; } 
    public string name { get; set; } 
} 

hero.service.tsにおけるコード:

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

とhero.tsで最終的英雄クラス:

export class Hero { id: number; name: string;} 

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"}] 

質問は、私はC#で使用し続けることができる方法である(これは今の問題を引き起こす)

public class Hero 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
} 

私が行った場合私は何の誤りもありません。この

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

ドキュメントSerialization Attributes

+0

私の経験上、c#からAngularへのプロパティマッピングでは大文字と小文字は区別されません。プロパティのスペルが正しい限り、問題は発生しません。何かエラーがありますか? –

+0

大文字と小文字は区別されませんか?面白い。 あなたの質問に答えるには:私は何の誤りもありません。ブラウザーには6つのオブジェクトだけが返され、レコードの内容は表示されません。つまり、オブジェクトはデシリアライズされ、プロパティのみが一致しません。 –

答えて

5

:それはちょうど、レコードのコンテンツのみがこれをdisplayed.Likeされていない、ブラウザで6つのオブジェクトを返します。 Application_ Global.asax.csで起動します。これにより、Jsonのシリアライズをラクダのようにすることができます。

GlobalConfiguration.Configuration.Formatters.JsonFormatter.SerializerSettings = new JsonSerializerSettings 
     { 
      Formatting = Formatting.Indented, 
      TypeNameHandling = TypeNameHandling.Objects, 
      ContractResolver = new CamelCasePropertyNamesContractResolver() 
     }; 
+0

問題が解決しました!ありがとう –

+0

これで問題が解決した場合は、受け入れられた答えとしてマークしてください –

+0

私は十分な "評判ポイント"を持っていないのでできません。さらに質問を閉じる。 –

2

がに以下を追加してみ

browser results

関連する問題