我在試圖將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'類 – 2012-02-05 01:32:37