我是C#的新手,我想要实现的目标是。
我有一个带有Type属性的Action类,它接受以下值之一:Button或Link:
public class Action
{
public ActionType Type { get; set; }
}
public enum ActionType
{
Button,
Link
}
我正在使用WebAPI,现在我使用以下模拟列表来检查返回的数据
private static IList<Alert> alerts = new List<Alert>()
{
new Alert()
{
Description = "You have cancelled your subscription",
Actions = new Action[]
{
new Action()
{
Type = ActionType.Button
}
}
}
};
当我在浏览器中测试时,我得到了
"Actions": [
{
"Type": 0
}
]
我想要实现的是type属性的返回值“button”或“link”。我尝试在这里定义ActionType:
public enum ActionType
{
Button = "button",
Link = "link"
}
但我收到以下错误“无法将类型'string'隐式转换为'int'。
如何修复上述错误?
答案 0 :(得分:1)
您需要使用自己的JSON序列化,例如使用Json.net,它具有该属性。看看这个:
class Example
{
[JsonConverter(typeof(StringEnumConverter))]
public ActionType ActionType { get; set; }
}
var serializedObject = JsonConvert.SerializeObject(new Example(), Formatting.Indented);
答案 1 :(得分:1)
您可以将枚举定义为:
public enum ActionType
{
Button,
Link
}
如果你需要它作为字符串使用:
var myEnum = ActionType.Button;
var myEnumAsString = myEnum.ToString();
这不是最有效的方式。但这是最简单的。
否则你可以创建一个
public static class ActionType
{
const string Button = "Button",
const string Link = "Link"
}
但这实际上是一个枚举,但没有int基础。
答案 2 :(得分:1)
您只能为integer
中的键分配enum
个值,比如说
public enum ActionType {
Button = 1,
Link = 2
}
如果您想将字符串(或 >分配给 enum 键,您可以实现扩展方法 :
public static ActionTypeExtension {
// Extension method: extends ActionType ("this" before ActionType)
// returns string
public static String ToReport(this ActionType value) {
if (value == ActionType.Button)
return "button";
else
return "link";
}
}
....
ActionType action = ActionType.Button;
String result = action.ToReport(); // <- "button"
答案 3 :(得分:1)
Enum是一组命名常量,其底层类型是任何整数类型(int,byte,long等)。 String不是整数类型,因此您不能将其用作枚举值。您可以将属性类型更改为string
public class Action
{
public string Type { get; set; }
}
并使用带有公共字符串值的类而不是枚举:
public class ActionType
{
public static readonly string Button = "button";
public static readonly string Link = "link";
}
但是我会使用枚举并传递整数值。如果您有一组值,则最好使用枚举,因为字符串不会限制您可以分配给操作的属性Type
的内容。我可以指定“Foo”,这样就可以,因为我甚至不知道ActionType
类的存在。通过枚举,您将拥有更多的安全性 - 属性具有ActionType
类型,并且无法无意中分配错误的值。传递整数也会比传递枚举常量的字符串名称使用更少的流量。