2012-02-05 14 views
0

EnumをjQGridのJSON文字列に変換しようとすると問題が発生します。だから私は、私はこのための最良のアプローチではないと思うので、私はシリアル化したいと思い、この方法を避けるために必要JSON.NETを使用したjQGridのJSONオブジェクトへの列挙

{{0: '-', 1: 'Active', 2: 'Deactive', 3: 'Pending'}}

public static string GetStatuses(bool addDefault = false) 
    { 
     var statusesEnum = Enum.GetValues(typeof(StatusEnum)); 
     string statuses = "{value: {0: '-', "; 

     foreach (StatusEnum status in statusesEnum) 
      statuses += String.Format("{0}: '{1}', ", (byte)status, Enum.GetName(typeof(StatusEnum), status)); 

     return statuses.Substring(0, statuses.Length - 2) + "}}"; 
    } 

:私は(手動で変換を行う)前に使用したフォーマットは、このましたそれはJSON.NETライブラリを使用しています。だから私はこれを書いた:

public class StatusJSON 
{ 
    public byte ID { get; set; } 
    public string Name { get; set; } 

    public StatusJSON() { } 

    public StatusJSON(byte id, string name) 
    { 
     ID = id; 
     Name = name; 
    } 
} 

public class JSONUtils 
{ 
    /// <summary> 
    /// Get all the posible statuses of selected <paramref name="type"/> in JSON 
    /// </summary> 
    /// <param name="type">Type of the status</param> 
    /// <param name="addDefault">Check if add a default/NULL status</param> 
    /// <returns>A string JSON with the statuses</returns> 
    public static string GetStatuses(Type type, bool addDefault = false) 
    { 
     var statusesEnum = Enum.GetValues(type); 
     List<StatusJSON> statuses = new List<StatusJSON>(); 

     if (addDefault) 
      statuses.Add(new StatusJSON(0, "-")); 

     foreach (var statusEnum in statusesEnum) 
      statuses.Add(new StatusJSON((byte)statusEnum, Enum.GetName(type, statusEnum))); 

     return JsonConvert.SerializeObject(statuses); 
    } 
} 

string statuses = JSONUtils.GetStatuses(typeof(StatusEnum), addDefault);として使用することができます。私が必要とするような文字列を取得するためのライブラリのいずれかの方法があります

[{"ID":0,"Name":"-"},{"ID":1,"Name":"Active"},{"ID":2,"Name":"Deactive"},{"ID":3,"Name":"Pending"}]

:問題は、このような文字列を返すよりもですか?ありがとう

+0

が、私は考えていない:これは選択オプションに有効です ' - '、1: 'アクティブ'、2: 'ディアクティブ'、3 '保留中'} } 'は有効なjson文字列ではありません。たぶんあなたは 'StringEnumConverter'クラスを見てください –

答えて

0

最後に私の古いコードを再利用しています。

public class Statutes 
{ 
    public byte ID { get; set; } 
    public string Name { get; set; } 

    public Statutes() { } 

    public Statutes(byte id, string name) 
    { 
     ID = id; 
     Name = name; 
    } 

    /// <summary> 
    /// Get all the posible statuses of selected <paramref name="type"/> 
    /// </summary> 
    /// <param name="type">Type of the status</param> 
    /// <param name="addDefault">Check if add a default/NULL status</param> 
    /// <returns>A list with the statuses</returns> 
    public static List<Statutes> SelectAll(Type type, bool addDefault = false) 
    { 
     var statusesEnum = Enum.GetValues(type); 
     List<Statutes> statuses = new List<Statutes>(); 

     if (addDefault) 
      statuses.Add(new Statutes(0, "-")); 

     foreach (var statusEnum in statusesEnum) 
      statuses.Add(new Statutes((byte)statusEnum, Enum.GetName(type, statusEnum))); 

     return statuses; 
    } 
} 

public class JSONUtils 
{ 
    /// <summary> 
    /// Get all the posible statuses of selected <paramref name="type"/> in JSON 
    /// </summary> 
    /// <param name="type">Type of the status</param> 
    /// <param name="addDefault">Check if add a default/NULL status</param> 
    /// <returns>A string JSON for jQGrid with the statuses</returns> 
    public static string GetStatusesJQGrid(Type type, bool addDefault = false) 
    { 
     var statuses = Statutes.SelectAll(type, addDefault); 
     string result = "{value: {"; 

     foreach (Statutes status in statuses) 
      result += String.Format("{0}: '{1}', ", status.ID, status.Name); 

     return result.Substring(0, result.Length - 2) + "}}"; 
    } 
} 

としてあなたはそれを使用することができます:string statuses = JSONUtils.GetStatusesJQGrid(typeof(StatusEnum), true);

まで私は、これはコードの良い作品だと思いJSON.NETを使用してより良い方法を見つけるために再利用だから今、私はこれを持っていますjQGridを使っている人のために。 `{{0以来、

colModel: {name: 'status_id', label: 'Status', edittype: 'select', sortable: true, search: true, stype:'select', editoptions: " + statuses + @", searchoptions: {sopt: ['eq', 'ne']}}

関連する問題