28

Web ApiのアクションメソッドからJSONスタイルの小文字の名前でオブジェクトを返したい場合は、プロパティ名をエイリアスして、以下のC#オブジェクトが次のJSONオブジェクトのようになるようにする方法があります。

C#応答モデル

    public class Account
    {
        public int Id { get; set; }
        public string AccountName { get; set; }
        public decimal AccountBalance { get; set; }

    }

返送したいJSON

    {
        "id" : 12,
        "account-name" : "Primary Checking",
        "account-balance" : 1000
    }
4

2 に答える 2

55

JSON.NETを使用できますJsonProperty

 public class Account
    {
        [JsonProperty(PropertyName="id")]
        public int Id { get; set; }
        [JsonProperty(PropertyName="account-name")]
        public string AccountName { get; set; }
        [JsonProperty(PropertyName="account-balance")]
        public decimal AccountBalance { get; set; }   
    }

これはJSON.NETでのみ機能します-明らかに。より不可知論者になりたい場合、および他の潜在的なフォーマッターが使用できるようにこのタイプの命名を使用する場合(つまり、JSON.NETを別のものに変更する場合、またはXMLシリアル化の場合)、以下を参照System.Runtime.Serializationして使用します。

 [DataContract]
 public class Account
    {
        [DataMember(Name="id")]
        public int Id { get; set; }
        [DataMember(Name="account-name")]
        public string AccountName { get; set; }
        [DataMember(Name="account-balance")]
        public decimal AccountBalance { get; set; }   
    }
于 2013-01-12T23:37:36.137 に答える
21

上記のFilipの答えは、シリアル化をきめ細かく制御する必要がある場合に最適ですが、グローバルな変更を行う場合は、以下に示すような1つのライナーを使用して行うことができます。

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );

        config.Formatters.JsonFormatter.SerializerSettings.Converters.Add(new StringEnumConverter());
        config.Formatters.JsonFormatter.SerializerSettings.ContractResolver =
            new CamelCasePropertyNamesContractResolver();  // This line will cause camel casing to happen by default.
    }
}

http://www.asp.net/web-api/overview/formats-and-model-binding/json-and-xml-serialization#json_camelcasing

編集 以下のコメントに基づいて、私は先に進み、ここに完全な解決策を含むブログ投稿を追加しました:http ://www.ryanvice.net/uncategorized/extending-json-net-to-serialize-json-properties-using-a- format-that-is-delimited-by-dashes-and-all-lower-case /

于 2013-01-14T14:14:52.773 に答える