3

ASP.NET MVC 4 Web アプリケーションを作成しました。このアプリケーション内でいくつかの残りの Web サービスを実装しましたが、ここで質問があります。

これは私の列挙型です:

    public enum ReturnCode { OK, InvalidParameter }

これは私が得るものです:

{
   "returnCode": 0,
   "data": null
}

しかし、これは私が欲しいものです:

{
   "returnCode": OK,
   "data": null
}

これを達成する方法はありますか?

4

3 に答える 3

4

JsonConverter を使用できます。

StringEnumConverterこの質問で言及されているJSON.Netのネイティブのものがあります文字列としての列挙型のJSONシリアル化

プロパティに注釈を付けます。

[JsonConverter(typeof(StringEnumConverter))]
public enum ReturnCode { OK, InvalidParameter }

または、WebApi Json.NET カスタム日付処理の構成例を使用して、グローバル シリアライザー設定に登録します。

于 2013-01-24T15:58:26.907 に答える
0

使用パターンをよく理解せずに提案を行うことは困難ですが、それでもなお.

列挙型をプライベート フィールドにします。

プライベート列挙型フィールドのエンティティ名を返すゲッターと、Enum.Parse を使用してプライベート フィールド値を設定するセッターを使用して、パブリック文字列プロパティを作成しました。

于 2013-01-24T15:56:27.920 に答える
0

はい、できます。追加の文字列プロパティを宣言し、シリアル化/逆シリアル化するときにそれを使用する必要があります。

例:

[DataContract]
public class MyResource
{
    [DataMember]
    public string Data { get; set; }

    public ReturnCode Code { get; set; }

    [DataMember(Name = "returnCode")]
    string ReturnCodeString
    {
        get { return this.Code.ToString(); }
        set
        {
            ReturnCode r;
            this.Code = Enum.TryParse(value, true, out r) ? r : ReturnCode.OK;
        }
    }
}

したがって、enum の値を文字列として渡すことができます (サーバーとクライアントの両方向)。

{
   "returnCode": "OK",
   "data": null
}

また

{
   "returnCode": "InvalidParameter",
   "data": null
}
于 2013-01-24T15:58:09.760 に答える