C# 使用JSON.NET枚举到jQGrid的JSON对象
我在尝试将C# 使用JSON.NET枚举到jQGrid的JSON对象,c#,asp.net,json,enums,json.net,C#,Asp.net,Json,Enums,Json.net,我在尝试将Enum转换为jQGrid的JSON字符串时遇到问题。我以前使用的格式(手动转换)是: {{0:'-',1:'Active',2:'Deactive',3:'Pending'}} public static string GetStatuses(bool addDefault = false) { var statusesEnum = Enum.GetValues(typeof(StatusEnum)); string statuses
Enum
转换为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);
}
}
公共类状态JSON
{
公共字节ID{get;set;}
公共字符串名称{get;set;}
公共状态JSON(){}
公共状态JSON(字节id、字符串名称)
{
ID=ID;
名称=名称;
}
}
公共类JSONUtils
{
///
///获取JSON中所选对象的所有可能状态
///
///身份类型
///检查是否添加默认/空状态
///带有状态的字符串JSON
公共静态字符串GetStatus(类型类型,bool addDefault=false)
{
var statusesEnum=Enum.GetValues(类型);
列表状态=新列表();
如果(添加默认值)
statuses.Add(新的StatusJSON(0,“-”));
foreach(statusesEnum中的var statusEnum)
添加(新的StatusJSON((字节)statusEnum,Enum.GetName(类型,statusEnum));
返回JsonConvert.SerializeObject(状态);
}
}
您可以将其用作:string statuses=JSONUtils.GetStatuses(typeof(StatusEnum),addDefault)代码>。问题在于,返回的字符串如下:
[{ID:0,Name:“-”},{ID:1,Name:“Active”},{ID:2,Name:“Deactive”},{ID:3,Name:“Pending”}]
库中有什么方法可以得到我需要的字符串?谢谢我最后做的是重新使用我的旧代码。现在我有了这个:
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) + "}}";
}
}
公共类法规
{
公共字节ID{get;set;}
公共字符串名称{get;set;}
公共法规({}
公共法规(字节id、字符串名称)
{
ID=ID;
名称=名称;
}
///
///获取所选对象的所有可能状态
///
///身份类型
///检查是否添加默认/空状态
///带有状态的列表
公共静态列表SelectAll(类型类型,bool addDefault=false)
{
var statusesEnum=Enum.GetValues(类型);
列表状态=新列表();
如果(添加默认值)
状态。添加(新法规(0,“-”);
foreach(statusesEnum中的var statusEnum)
添加(新法规((字节)statusEnum,Enum.GetName(类型,statusEnum));
返回状态;
}
}
公共类JSONUtils
{
///
///获取JSON中所选对象的所有可能状态
///
///身份类型
///检查是否添加默认/空状态
///jQGrid的JSON字符串,状态为
公共静态字符串GetStatusesJQGrid(类型,bool addDefault=false)
{
变量状态=法规。选择全部(类型,添加默认值);
字符串结果=“{value:{”;
foreach(status中的status)
result+=String.Format(“{0}:'{1}',”,status.ID,status.Name);
返回result.Substring(0,result.Length-2)+“}”;
}
}
您可以将其用作:string statuses=JSONUtils.GetStatusesJQGrid(typeof(StatusEnum),true)代码>
在我找到更好的使用JSON.NET的方法之前,我认为这是一段很好的代码,可供使用jQGrid的人重复使用。这对选择选项有效:
colModel:{name:'status_id',label:'status',edittype:'select',sortable:true,search:true,stype:'select',editoptions:“+statuses+@”,searchoptions:{sopt:['eq',ne']}
我不认为,因为{0:'-',1:'Active 2:'Deactive 3:'Pending'}
不是有效的json字符串。也许你应该看看StringEnumConverter
类